由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 最近研究了一下 java AbstractQueuedSynchronizer
相关主题
cassandra async 问题操!本版连interlocked指令都没有懂的?
Help - C++ Debug Assertion Failed哥决定常驻这个版了
请教java中compareTo的方法有人知道AtomicInteger是如何实现的么
JAVA equals()和hashCode()请教。问一个java基础的初始化的问题,一直搞不明白
C++的exception大家常用吗?有两道Java多线程的面试题能不能帮我看看?
使用assert应遵循什么原则?Java concurrency的疑惑,难道我理解错了?
单线程多线程说到底沉默的大多数呢?这版本来还有些很好讨论的
总结贴请教个JAVA的小问题
相关话题的讨论汇总
话题: data话题: state话题: object话题: arg
进入Programming版参与讨论
1 (共1页)
c*****e
发帖数: 3226
1
觉得 Doug lee 很 厉害, 那种 多线程同步的class implementation 写的太牛B了。
虽然我还是没怎么看懂。。。。
w**z
发帖数: 8232
2
Java Concurrency in Practice
by Brian Goetz
此人也牛掰。

【在 c*****e 的大作中提到】
: 觉得 Doug lee 很 厉害, 那种 多线程同步的class implementation 写的太牛B了。
: 虽然我还是没怎么看懂。。。。

g*********9
发帖数: 1285
3
Such low level concurrent program is almost impossible to understand without
detailed design documentation. Understanding Jvm memory model is enough.

【在 c*****e 的大作中提到】
: 觉得 Doug lee 很 厉害, 那种 多线程同步的class implementation 写的太牛B了。
: 虽然我还是没怎么看懂。。。。

c*****e
发帖数: 3226
4
这本书是很经典,把很多基本概念解释的很清楚。
AbstractQueuedSynchronizer 很核心,是所有 reentrantlock, futuretask,
countdownbatch, cyclicbarrier, readwritelock 的 实现基石. 强烈建议学 java 的
学习一下。
G 家写 Guava 的那帮人也很厉害,完全写了一个自己的 FutureTask 而不是基于
AbstractQueuedSynchronizer的。
国人有写大系统的,但是这种千锤百炼的核心代码似乎还没有写出来的。这就类似于飞
机的发动机还做不出来差不多。

【在 w**z 的大作中提到】
: Java Concurrency in Practice
: by Brian Goetz
: 此人也牛掰。

n******n
发帖数: 12088
5
看不懂就是厉害?

【在 c*****e 的大作中提到】
: 觉得 Doug lee 很 厉害, 那种 多线程同步的class implementation 写的太牛B了。
: 虽然我还是没怎么看懂。。。。

c*****e
发帖数: 3226
6
你算哪根葱?

【在 n******n 的大作中提到】
: 看不懂就是厉害?
n******n
发帖数: 12088
7
我不会评价自己看不懂的东西牛B。看不懂怎么评价?无非转发别人的评价而已。

【在 c*****e 的大作中提到】
: 你算哪根葱?
c*****e
发帖数: 3226
8
AbstractQueuedSynchronizer 果然是神器,以前做那道h2O 的题总觉得不对,
用神器就舒服多了,而且感觉基本上是对的。欢迎提错。
值得改进的地方就是 countH & countO 可以直接存到 state integer 里面去。
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.AbstractQueuedSynchronizer;
public class H2O {
MySync sync = new MySync();
CountDownLatch latch = new CountDownLatch(3);
Object guard = new Object();
Data data = new Data();
class Data {
Object h1;
Object h2;
Object o;
}
public void putH(Object x) throws InterruptedException {
sync.acquireShared(1);
synchronized (guard) {
if (data.h1== null) {
data.h1 = x;
} else {
data.h2 = x;
}
}
latch.countDown();
latch.await();
}
public void makeH2O(Data data) {
// ...
}
public void putO(Object x) throws InterruptedException {
sync.acquireShared(-1);
synchronized (guard) {
data.o = x;
}
latch.countDown();
latch.await();
makeH2O(data);
data = new Data();
latch = new CountDownLatch(3);
sync.releaseShared(0);
}
class MySync extends AbstractQueuedSynchronizer {
public int STATE_EMPTY = 0;
public int STATE_OK = 1;
public AtomicInteger countH = new AtomicInteger(0);
public AtomicInteger countO = new AtomicInteger(0);
public MySync() {
this.setState(STATE_EMPTY);
}
@Override
protected int tryAcquireShared(int arg) {
assert arg == 1 || arg == -1;
if (arg == 1 && countH.get() < 2) { // mean H
countH.addAndGet(1);
setState(STATE_OK);
return 1;
}
if (arg == -1 && countO.get() == 0) { // mean O
countO.addAndGet(1);
setState(STATE_OK);
return 1;
}
return -1;
}
@Override
protected boolean tryReleaseShared(int arg) {
assert arg == 0;
assert getState() == STATE_OK;
setState(STATE_EMPTY);
return true;
}
}
}

【在 c*****e 的大作中提到】
: 觉得 Doug lee 很 厉害, 那种 多线程同步的class implementation 写的太牛B了。
: 虽然我还是没怎么看懂。。。。

1 (共1页)
进入Programming版参与讨论
相关主题
请教个JAVA的小问题C++的exception大家常用吗?
[合集] C++ question -- how to save objects使用assert应遵循什么原则?
弱问一下单线程多线程说到底
return value of a python function...总结贴
cassandra async 问题操!本版连interlocked指令都没有懂的?
Help - C++ Debug Assertion Failed哥决定常驻这个版了
请教java中compareTo的方法有人知道AtomicInteger是如何实现的么
JAVA equals()和hashCode()请教。问一个java基础的初始化的问题,一直搞不明白
相关话题的讨论汇总
话题: data话题: state话题: object话题: arg