【发布时间】:2015-07-01 07:13:02
【问题描述】:
同步类方法中静态变量的更新是否保证之前发生过?以此为例:
public class MyClass {
private static boolean isDone = false;
public static synchronized doSomething() {
if (!isDone) {
// ...
}
isDone = true;
}
}
变量isDone(不是volatile)在此同步类方法中更新后是否对所有线程可见?据我了解,MyClass.class 上的同步本身并不能保证对其静态变量的所有更新对其他线程都是可见的,因为其他线程可能有一个本地缓存。
【问题讨论】:
-
显然,不,因为读取在监视器上不同步
-
无论如何,对于您的示例,如果变量仅在同步方法中使用,它将起作用
标签: java multithreading synchronized volatile java-memory-model