懶漢式(線程安全,同步代碼塊兒)
代碼演示
// 懶漢式 (線程安全_ 同步放法_)
class Singleton{private static Singleton instance;private Singleton() {}// 提供一個靜態的公有方法 加入了同步處理的代碼// 解決線程安全問題// 即懶漢式// 我們在這里加一個關鍵字 synchronizedpublic static Singleton getInstance() {if (instance == null) {synchronized(Singleton.class){instance = new Singleton();}}return instance;}
}
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-X10OUu0Q-1613785230625)(./img/mm/meizi56.jpg)]
優缺點說明
-
這總方式,本意是想對于第四種實現方式的改進,因為前面同步方法效率太低,
改為同步產生實例化的的代碼塊 -
但是這種同步并不能起到線程同步的作用,跟第三種實現方式遇到的情形一致,假如一個線程進入了if(singleton == null)判斷語句塊兒,還未來得及往下執行,另一個線程也通過了這個判斷語句,這時便會產生多個實例
-
結論:在實際開發中,不能使用這種方式(沒多大卵用)
更多:http://victorfengming.gitee.io/design_pattern/