publicclass
singleton //
私有化構造器
private
static singleton instance = null; //
類的內部建立物件
public
static singleton getinstance()
return
instance;
}}//
餓漢class
singleton2
//只例項化一次,執行緒安全。 但是有些浪費空間
private
static singleton2 instance = new
singleton2();
public
static
singleton2 getinstance()}//
雙重檢測鎖 懶漢模式
/** 可能存在的問題:執行緒a進行第一次訪問,①處為null拿到鎖②也為null 執行③
* instance = new singleton3() 會被編譯器編譯成jvm指令
* * memory = allocate(); //1.分配記憶體空間
* ctorinstance(memory); //2.初始化物件
* instance = memory; //3.將instance指向剛分配的位址
* * 可能jvm將指令優化重排為 1 3 2
* * 當a執行緒執行到3時cpu被b執行緒拿到,此時b執行緒①出不為null 直接返回instance
* 而此時的instance只有記憶體位址,並沒有初始化完成
* * */
class
singleton3
private
static singleton3 instance = null
;
public
static
singleton3 getinstance()}}
return
instance;
}}//
雙重檢測鎖 懶漢模式 volatile
class
singleton4
//volatile 阻止指令重排、禁用執行緒記憶體 保證每次都讀寫主記憶體的值
private
volatile
static singleton4 instance = null
;
public
static
singleton4 getinstance()}}
return
instance;
}}//
雙重檢測鎖 懶漢模式 volatile +優化
/** volatile 阻止指令重排,讀取volatile修飾的變數消耗的效能會比較大
* * 所以建立臨時變數,在instance不為null時,直接返回臨時變數,不再去訪問volatile的變數 提高25%的效能
* */class
singleton5
private
volatile
static singleton5 instance = null
;
public
static
singleton5 getinstance()}}
return inst; //
返回臨時變數
}}
單例模式寫法
單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系...
單例模式幾種寫法
1.餓漢式 public class singleton public static singleton getinstance 2.懶漢式 public class singleton 雙層檢測鎖 public static singleton getinstance return instanc...
設計模式 單例模式的寫法
目錄第三種實現方式 執行緒安全 雙重檢查 加鎖 3 靜態內部類實現單例模式 4 列舉 5 參考鏈結 單例模式的特點就是建構函式私有化,變數私有化,然後定義乙個public的方法。class singleton public static singleton getinstance 第一種實現方法 執...