
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论坛