雙重檢查模式(DCL)問題

myserver368發表於2009-12-23
本來在上篇帖子裡發了,不過沒人回答,呵呵 做一個新的問題,問問大家怎麼看。

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;
}
如果一個執行緒在不使用同步的情況下讀入該引用,並呼叫被引用的物件上的方法,那麼這個方法可能會看到物件被部分初始化的狀態,從而導致災難性的後果。

相關文章