effective java中文版一书中,在165页里说:
迟延初始化(lazy initialization)的双重检查模式(DCL):
private static Foo foo=null;
public static Foo getFoo(){
if(foo == null){
synchronized (Foo.class){
if(foo==null)
foo=new Foo();
}
}
return foo;
}
如果一个线程在不使用同步的情况下读入该引用,并调用被引用的对象上的方法,那么这个方法可能会看到对象被部分初始化的状态,从而导致灾难性的后果。