CyclicBarrier上的java可见性同步?
在Java中使用CyclicBarrier同步线程时,它们是否同步非易失性变量
int a = 0;
int b = 0;
CyclicBarrier barrier = new CyclicBarrier(2);
/*** Thread 1 ***/
public void run() {
a = 2;
barrier.await();
doSomeStuff(b); // no side-effects
}
/*** Thread 2 ***/
public void run() {
b = 3;
barrier.await();
doSomeStuff(a); // no side-effects
}
我们可以确定线程1的doSomeStuff调用b已设置为3吗? 尝试时总是3
# 1 楼答案
是的,正如您从CyclicBarrier类的javadoc中所看到的,可视性正如您所期望的那样: