1. 程式人生 > >多線程下單例

多線程下單例

系統 http 又能 就是 log DC read locking 其他

1.什麽是單例模式?

單例模式是為確保一個類只有一個實例,並為整個系統提供一個全局訪問點的一種模式方法。

單例的特點:

在任何情況下,單例類永遠只有一個實例存在 單例需要有能力為整個系統提供這一唯一實例

餓漢和懶漢單例

1.餓漢式單例是指在方法調用前,實例就已經創建好了

技術分享圖片

2. 懶漢式單例是指在方法調用獲取實例時才創建實例,因為相對餓漢式顯得“不急迫”,所以被叫做“懶漢模式”

技術分享圖片

3.使用靜態內置類實現單例模式

DCL解決了多線程並發下的線程安全問題,其實使用其他方式也可以達到同樣的效果

技術分享圖片

以上代碼就是使用靜態內置類實現了單例模式,這裏將前面驗證多線程下執行情況的MyThread類放入到org.mlinge.s06包下運行

4.Double Check Locking 雙檢查鎖機制

為了達到線程安全,又能提高代碼執行效率,我們這裏可以采用DCL的雙檢查鎖機制來完成

技術分享圖片

5.序列化與反序列化的單例模式實現

靜態內部類雖然保證了單例在多線程並發下的線程安全性,但是在遇到序列化對象時,默認的方式運行得到的結果就是多例的。

技術分享圖片

序列化與反序列化測試代碼:

技術分享圖片

多線程下單例