关于这个主题有几个问题,但大多数都绕开了这个问题,因为这不是问题的意图。
如果我的班级中有一个静态易失性:
private static volatile MyObj obj = null;
在下面的方法中我这样做:
public MyObj getMyObj() {
if (obj == null) {
obj = new MyObj();// costly initialisation
}
return obj;
}
我需要同步以确保只有一个线程写入该字段,还是任何写入对评估obj == null
条件的其他线程立即可见?
换句话说: volatile 是否让您不必同步对静态变量的写入访问?