設計模式之單例模式 2 懶漢式及其多執行緒問題

2021-10-03 18:28:33 字數 3137 閱讀 8797

學習設計模式的日常demo

懶漢式(執行緒不安全)

**實現:

public

class

lazysingleton01

}class

lazysingleton

private

static lazysingleton instance;

// 提供靜態方法,當使用該方法時,才去建立例項物件

public

static lazysingleton getinstance()

return instance;

}}

優缺點說明:

懶漢式(執行緒安全,同步方法)

public

class

lazysingleton02).

start()

;new

thread((

)->).

start()

;}}// 採用同步方法

// 效率太低,每個執行緒進來都要先同步

class

lazysafe

private

static lazysafe instance;

// 加入synchronize關鍵字,解決執行緒安全問題

優缺點說明:

懶漢式(執行緒安全,同步**塊)

雙重檢查

**實現:

public

class

lazysingleton03).

start()

;new

thread((

)->).

start()

;}}// 採用雙重檢查

class

lazysafe2

// 保證多個執行緒都從主存中獲取共享變數

private

volatile

static lazysafe2 instance;

// 雙重檢查,解決執行緒安全問題,解決懶載入問題

// 保證了效率,推薦使用

優缺點說明:

其他實現方式

靜態內部類

**實現:

public

class

staticsingleton01).

start()

;new

thread((

)->).

start()

;}}// 使用靜態內部類完成單例模式

// 利用靜態內部類的特點實現延遲載入,效率高

// 推薦使用

class

staticsingleton

private

static staticsingleton instance;

// 寫乙個靜態內部類,該類中有乙個靜態屬性staticsingleton

// 主類載入時,該內部類不會載入 --> 實現懶載入

// 當呼叫主類的getinstance()方法時,才會載入該內部類

// jvm中類的載入是執行緒安全的,所以該方法 --> 懶載入且安全

優缺點說明:

列舉**實現:

public

class

enumsingleton01).

start()

;new

thread((

)->).

start()

;}}// 列舉實現單例模式

// 可以避免多執行緒同步問題

// 防止反序列化重寫建立物件

// 推薦使用

優缺點說明:

單例模式注意事項和細節說明

github:設計模式源**

設計模式之單例模式(餓漢式,懶漢式)

public class singleton1 私有的構造方法 private singleton1 public class singleton2 return instance 私有構造方法 private singleton2 以上的懶漢式,為什麼要進行兩次判空呢?懶漢式單例模式涉及併發的問題...

懶漢式單例設計模式

懶漢式單例設計模式 特點 什麼時候用,什麼時候開闢空間.缺點 多執行緒模式下,會出現問題,達不到單例模式的效果 步驟 1.構造方法私有化 2.定義乙個私有的.靜態的.類的成員變數,但不為其賦初始值 設定初始值為null 3.提供乙個名稱為getinstance 的公共的.靜態的方法,在方法中先判斷步...

單例設計模式(懶漢式)

版本 v1.0 public class study 6 10 物件是方法被呼叫時,才初始化,也叫做物件的延時載入。稱為 懶漢式 single類進記憶體,物件還沒有存在,只有呼叫了getinstance方法時,才建立物件 開發一般用餓漢式 如果乙個人呼叫方法沒有問題,如果多個人一起呼叫就會出問題,就...