在几篇文章中,它说使用 volatile 修复了双重检查锁定问题。
class Foo {
private volatile Helper helper = null;
public Helper getHelper() {
if (helper == null) {
synchronized(this) {
if (helper == null)
helper = new Helper(); //Important
}
}
return helper;
}
}
但是在这里,即使我们使用 volatile 作为辅助字段,这怎么可能是一个安全的发布呢?我的意思是这怎么能保证我们不会得到一个不一致的 Helper 对象?