多線程安全的單例代碼中,爲何要兩次判斷是否爲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了
避免被二次初始化。
這是單例模式的多線程必須注意的問題!
if (instance == null) {
instance = new GlobalConfig();
}
}
public static GlobalConfig getInstance() {
if (instance==null) {
syncInit();
}
return instance;
}
防止2個線程同時發現instance==null,然後同時調用了syncInit()的同步方法。
這樣做,第二個進入syncInit的線程將發現那個對象已經不再是null了
避免被二次初始化。
這是單例模式的多線程必須注意的問題!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
美團面試:說說Netty的零拷貝技術?
Java中文社羣
2024-06-07 14:39:30
2024 Web 新特性 - 使用 Popover API 創建彈窗
劉漢貴
2024-06-07 14:33:29
開發視頻會議系統:使用GPU解碼渲染視頻
zhuweisky
2024-06-07 14:33:09
C#/.NET/.NET Core優秀項目和框架2024年5月簡報
追逐時光
2024-06-07 14:28:29
計劃做點事情-還是跳槽
eonie
2024-06-07 14:26:39
好久沒來了-20240607
eonie
2024-06-07 14:26:39
vscode win11 配置go
張博的博客
2024-06-07 14:26:29
構建Arm版jdk1.8 docker基礎鏡像
M_mxy
2024-06-07 14:23:19
微軟RPA工具Power Automate Desktop
2018
2024-06-07 14:20:58
Power Automate Desktop 安裝完,登錄後老是提示one driver 錯誤
Power Automate Desktop 安裝完,登錄後老是提示one driver 錯誤
2018
2024-06-07 14:20:58
k8s網絡問題以及容器跨宿主機通信原理 k8s組件和網絡插件掛掉,演示已有的pod是否正常運行 k8s組件和網絡插件掛掉,演示已有的pod是否正常運行
馬昌偉
2024-06-07 14:19:58
dubbo~全局異常攔截器的使用與設計缺陷
張佔嶺
2024-06-07 14:18:38