單例模式的多種寫法

2022-08-31 00:21:27 字數 1787 閱讀 2490

public

class

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 第一種實現方法 執...