14 單例模式筆記

2021-10-24 08:36:47 字數 1225 閱讀 1516

單例模式:程式執行時,讓乙個類只能建立乙個物件

餓漢式:

//單例模式------餓漢式

public

class

singletonhungary

//2.建立當前類的物件

private

static singletonhungary s =

newsingletonhungary()

;//3.對外提供公共訪問方法將singletonhungary物件暴露給外部

public

static singletonhungary getinstance()

}

懶漢式

//單例模式----懶漢式,延遲載入模式

public

class

singletonlazy

//2.建立當前類的引用

private

static

volatile singletonlazy s;

//3.對外提供公共的訪問方法將singletonhungary物件暴露給外部

public

static singletonlazy getinstance()

}}return s;

}//測試多執行緒

public

static

void

main

(string[

] args)).

start()

;}}}

注意:

懶漢式在建立物件的時候不是乙個原子性的操作,由於它不是乙個原子性的操作,所以它在new 乙個物件的時候有三個步驟:

1.分配記憶體空間內

2.執行構造方法,初始化物件

3.把這個物件指向這個空間

我們期望的是按照123的順序執行,但在併發情況下,有可能會執行132,這是在電腦的cup上是可以做到的,

a經常進來的時候沒有問題(也就是第一次進來的時候),但b程序進來就有問題了,由於它已經指向了這個空間了,b會認為這個物件不是null,就直接返回了,由於b還沒完成構造,所以它的這個空間其實是乙個虛的,

所以解決這個問題的方法是:必須在物件的引用上加乙個volatile關鍵字,實現變數修改的可見性

設計模式 1 4單例模式

單例模式 乙個類只允許生成乙個例項,並提供乙個訪問它的全域性訪問點。1 private static singleton instance 23 4 構造方法私有化,不讓外界new新的例項,5 6private singleton 79 10 11 獲得例項的唯一乙個全域性訪問點 12 13 14p...

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

設計模式筆記 單例模式

單例模式在系統開發時很常見,乙個系統中可能會有多個單例模式的運用!它比全域性變數的好處?1.能控制生成時間,保證初始化順序?2.容易保證執行緒安全 全域性變數需要多執行緒client單獨控制併發,單例在類實現中已經做到,無需client再處理 3.減少函式模組之間的耦合,減少命名衝突,便於管理?可能...