【发布时间】:2014-05-16 17:36:00
【问题描述】:
在以下简单场景中:
class A {
int x;
Object lock;
...
public void method(){
synchronized(lock){
// modify/read x and act upon its value
}
}
}
x 需要是 volatile 的吗?我知道同步保证原子性,但我不确定可见性......是否锁定 -> 修改 -> 解锁 -> 锁定保证,在第二次锁定之后 x 的值将是“新鲜的”?
【问题讨论】:
-
x不必是易变的,但lock必须是最终的。 -
当然,你必须在持有同一个锁的同时阅读
x。
标签: java multithreading locking volatile memory-model