【发布时间】:2013-01-15 00:06:35
【问题描述】:
我一直在阅读有关 Java 并发性的内容,但忘记了使用相同锁的两个线程中的同步块也会影响变量的可见性,即使它们没有被定义为“易失性”。如果我有这样的代码
Object lock = new Object();
boolean a = false, b = false, c = false;
void threadOne() {
a = true;
synchronized(lock) {
b = true;
}
c = true;
}
void threadTwo() {
while (true) {
synchronized(lock) {
if (a && b && c) break;
}
}
}
...而threadOne和threadTwo会被不同的线程调用:
是否保证代码会跳出while循环?
如果我们从方程中删除变量 c 会怎样?我想知道是否只有 b 保证在 threadTwo 中可见,因为它在同步块内。
【问题讨论】:
标签: java concurrency synchronized java-memory-model