多線程安全的單例代碼中,爲何要兩次判斷是否爲null

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

防止2個線程同時發現instance==null,然後同時調用了syncInit()的同步方法。

這樣做,第二個進入syncInit的線程將發現那個對象已經不再是null了
避免被二次初始化。


這是單例模式的多線程必須注意的問題!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章