假设我有以下类定义,当一个线程想要为多个(可能)等待的线程设置一个时:
public class A {
private int a;
private CountDownLatch gate;
public A(int a) {
a = 1;
gate = new CountDownLatch(1);
}
public int getA() {
latch.await();
return a;
}
public void setA(int a) {
this.a = a;
gate.countDown();
}
}
在我看来,a 需要是 volatile 的,但我不确定……有人可以分享一下为什么(如果有的话)需要围绕 getA 进行额外的同步,或者 a 需要是 volatile 的吗?