我也在CSDN发过类似的帖子,不过没什么人回应,555~~~
http://expert.csdn.net/Expert/TopicView1.asp?id=2457400
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;
   }
   如果一个线程在不使用同步的情况下读入该引用,并调用被引用的对象上的方法,那么这个方法可能会看到对象被部分初始化的状态,从而导致灾难性的后果。
    
请问  这里为什么会产生部分初始化的对象?一个线陈怎么在不同步的情况下读入该引用,又怎么会看到部分初始化的对象呢?
  
http://www.jdon.com/jivejdon/thread/37878#23126506