当在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.
发布于 2013-07-27 12:52:38
是的,正如您可以从CyclicBarrier类的javadoc中看到的那样,可见性正如您所期望的那样:
内存一致性效应:在调用await()之前,线程中的操作--在作为屏障操作的一部分的操作之前--在其他线程中成功地从相应的await()返回之后的操作之前发生。
https://stackoverflow.com/questions/17897732
复制相似问题