什麼是單例設計模式?

2021-08-11 14:54:36 字數 1466 閱讀 4640

單例模式第一版:

public classsingleton 

returnourinstance

; }

//私有建構函式

privatesingleton()

}

為什麼要這樣寫?
1.要想讓乙個類只能構建乙個物件,自然不能讓它隨便去做new 操作,因此signleton的構造方法是私有的。
2.ourstance是singleton類的靜態成員,也是我們的單例物件。它的初始值可以寫成null,也可以寫成new singleton().至少其中的區別後來解釋

2.getinstance是獲取單例物件的方法

如果單例初始值為null,還未構建,則構建單例物件並未返回。這個寫法屬於單例模式當中的懶漢模式

如果單例物件一開始就被new singleton()主動構建,則不再需要判空操作,這種寫法屬於餓漢模式

餓漢:主動找食物吃。懶漢:躺在地上等著人喂

3.剛才的**非執行緒安全

單例模式第二版
public classsingleton }}

returnourinstance

; }

//私有建構函式

privatesingleton()

}

1.為了防止new singleton被執行多次,因此在new操作之前加上synchorized同步鎖,鎖住整個類

2.進入synchorized臨界區以後,還要在做一次判空,因為當兩個執行緒同時訪問的時候,執行緒a構建完物件,執行緒b也已經通過了最初的判空驗證,不做第二次判空,執行緒b還會再次構建ourstance物件

兩次判空的機制叫雙重檢測機制

單例模式第三版
public classsingleton 

}returnourinstance

; }

//私有建構函式

privatesingleton()

}

1.經過volatile的修飾,當執行緒a執行ourstance = new singleton的時候,jvm執行順序

memory = allocate();分配物件的記憶體
ctorourstance(memory);初始化物件
ourstance = memory;設定ourstance指向剛分配的記憶體位址
2.volatile關鍵字不但可以防止指令重排。也可以保證執行緒訪問的變數值是在主記憶體中的最新值

什麼是單例模式

1.單例模式只能有乙個例項。2.單例類必須建立自己的唯一例項。3.單例類必須向其他物件提供這一例項。第一步 將類的建構函式生命為私有的建構函式,這樣我們在外部就無法通過singleton s new singleton 來例項化該,因為private生命的成員只有在該類的內部可以訪問。這樣可以保證類...

什麼是單例模式

1.保證類在記憶體中只能有乙個物件 1.懶漢式 類一載入就建立物件 2.餓漢式 用的時候,才去建立物件 相關經驗 餓漢式 是不會出現問題的單例模式 懶漢式 可能會出現問題的單例模式 1.懶載入 延遲載入 2.執行緒安全問題 1.是否多執行緒環境 是 2.是否有共享資料 是 3.是否有多條語句操作共享...

什麼是單例模式

1.保證類在記憶體中只能建立乙個物件 1.餓漢模式 程式啟動時就建立唯一物件 2.懶漢模式 用的時候才建立物件 餓漢模式 不會出現問題 懶漢模式 可能會出現問題 1 延遲載入 2 執行緒安全問題 3 是多執行緒環境 4 是有共享資料 5 有多條語句操作共享資料 餓漢模式 1.建立唯一物件首先要禁用建...