我粘贴了一些关于Java并发的代码:
public class ValueLatch <T> {
@GuardedBy("this") private T value = null;
private final CountDownLatch done = new CountDownLatch(1);
public boolean isSet() {
return (done.getCount() == 0);
}
public synchronized void setValue(T newValue) {
if (!isSet()) {
value = newValue;
done.countDown();
}
}
public T getValue() throws InterruptedException {
done.await();
synchronized (this) {
return value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么return value;需要同步???
返回语句不是原子的吗?
返回不需要同步.由于CountDownLatch.countDown()直到最后一次设置值之后才调用,CountDownLatch.await()因此在读取和返回值之前确保该值是稳定的.
写这篇文章的开发人员可能不太确定他在做什么(并发很困难和危险),或者更可能的是,他使用GuardedBy注释value导致他的构建系统发出警告return,而其他一些开发人员同步它不必要的只是让警告消失.
我说'其他开发人员',因为这个类似乎是专门设计的,getValue()一旦设置了值就允许继续而不锁定.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |