單例模式:程式執行時,讓乙個類只能建立乙個物件
餓漢式:
//單例模式------餓漢式
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.減少函式模組之間的耦合,減少命名衝突,便於管理?可能...