ITPUB论坛 » Java入门与认证版 » 多线程安全的单例代码中,为何要两次判断是否为null
新一届的微软MVP评选已经开始,欢迎各位推荐!
2008-7-16 12:20 hanfeishu
多线程安全的单例代码中,为何要两次判断是否为null


developerWorks 中国  >  Java technology  >
Java单例对象同步问题探讨
[url]http://www.ibm.com/developerworks/cn/java/l-singleton/[/url]

private static synchronized void syncInit() {
if (instance == null) {
instance = new GlobalConfig();
}
}
public static GlobalConfig getInstance() {
if (instance==null) {
syncInit();
}
return instance;
}

2008-7-16 12:20 smartpig
防止2个线程同时发现instance==null,然后同时调用了syncInit()的同步方法。

这样做,第二个进入syncInit的线程将发现那个对象已经不再是null了
避免被二次初始化。


这是单例模式的多线程必须注意的问题!

2008-7-16 12:20 smartpig
此文收录于 [url]http://www.java2000.net/viewthread.jsp?tid=7163[/url]

2008-7-16 16:33 justforregister
保险一点

2008-7-16 16:47 ericlntm
考虑的真到位啊。值得学习

2008-7-16 17:48 john3000
就是做一个double check嘛

2008-7-17 08:20 seraphin
双保险

2008-7-17 15:17 greenflute
左,右

2008-7-18 01:30 yining
这里面还是有一个小trick的,就是第二次检查必须放在一个另外的方法里面,而不能够进行函数展开把两个check放在同一个方法内。不过这么做能有多少性能优势很难讲。小心double checked locking。

2008-7-18 15:40 voca
保险是好习惯

页: [1]


Powered by ITPUB论坛