- Java 构造对象不是原子操作:
1.先申请一块空内存
2.将其地址赋予 对象引用
3.在对象引用所指的地址之上构建对象,调用构造函数初始化
- 很多人提供了很多方法来修复DCL,但是没有人能够成功
- 行为正确的程序,但是增加了同步的负担
// Correct multithreaded version ,but synchronized every time!
class Foo {
private Helper helper = null;
public synchronized Helper getHelper() {
if (helper == null){
helper = new Helper();
}
return helper;
}
// other functions and members…
}