簡單理解:在記憶體中某個例項物件只有乙個,並由程式程序中的其他執行緒共享該例項。
(1)了解物件建立過程
第一步:分配記憶體空間
第二步:呼叫建構函式,初始化例項。
(2)禁止指令重排序
當建構函式在物件初始化的完成之前就完成了物件賦值,在記憶體中開闢一片儲存區域後直接返回記憶體的引用,但是這個時候還沒正真的初始化完物件,此時別的執行緒去判斷instance != null,則會出現空指標異常。
(3)保證可見性
當a執行緒初始化物件,但還未重新整理到主存,b執行緒正好也同時進行了相同的操作,則實際上建立了多個物件。
基於以上考慮,可以引入volatile關鍵字來修改共享變數instance。
/**
* 單例模式
*/public class singleton
public static singleton getinstance()}}
return instance;}}
設計模式之單例DCL為什麼需要volatile
單例模式dcl實現 pulic class singleton 類的內部宣告變數 volatile防止指令重排 private static volatile singleton singleton 對外暴露乙個靜態方法,當呼叫該方法時,才去建立例項 singleton 加入雙重檢查,解決執行緒安全...
設計模式一之單例模式
單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系...
設計模式一之單例模式
第一種單例模式 餓漢式 建構函式私有化 提供公共的靜態函式 建立物件 public class singleton public static singleton getinstance 第二種單例模式 懶漢式 跟第一種單例模式相比 懶漢式是在需要使用物件的時候才建立物件 建立的時候使用雙重檢查 兼...