我今天也用多线程测了一下自己的一些DCl模块(包括Factory Cache),一点问题都没有。(500个并发线程,虽然受机器性能限制,不一定能同时启动,但还是能说明问题的)

to shyguy: 你提到的TestCase能share一下么?

我很同意楼主的做法,我觉得是没问题的
我也在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;
}
如果一个线程在不使用同步的情况下读入该引用,并调用被引用的对象上的方法,那么这个方法可能会看到对象被部分初始化的状态,从而导致灾难性的后果。

请问 这里为什么会产生部分初始化的对象?一个线陈怎么在不同步的情况下读入该引用,又怎么会看到部分初始化的对象呢?