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了。 : 虽然我还是没怎么看懂。。。。
|