来自维基百科的规范破坏双重检查锁定的略微修改版本:
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null) {
synchronized(this) {
if (helper == null) {
// Create new Helper instance and store reference on
// stack so other threads can't see it.
Helper myHelper = new Helper();
// Atomically publish this instance.
atomicSet(helper, myHelper);
}
}
}
return helper;
}
}
假设底层原子操作库正常工作,是否简单地使新创建的 Helper 实例原子的发布使这个双重检查锁定习语安全?我意识到在 Java 中,可以只使用volatile
,但即使该示例是伪 Java 中的,这也应该是一个与语言无关的问题。
也可以看看: