Java單例模式的各種寫法和最優寫法推薦

2021-07-28 04:39:40 字數 1314 閱讀 1443

話不多說,直接上**:

1.懶漢模式

只適合單執行緒環境,在需要的時候才去建立物件例項(時間換空間)。

優點:在不要物件例項的時候,節省了記憶體空間。

缺點:在使用的時候會先判斷是否為空,為空的話,才去建立物件。所以獲取物件例項相對較慢。

class singleton

public

static singleton getinstance()

return instance;

}}

評價:由於只生成乙個例項,為防止別人建立該類例項,構造方法為私有屬性,只有在例項物件為空時才去建立(為避免重複建立)。

2.餓漢模式

在類編譯的時候就建立物件例項,以後使用的時候直接使用(空間換時間)。

優點:獲取物件的時候速度快,節省了建立物件的時間。

缺點:不使用也會占用記憶體空間。

class singleton

public

static singleton getinstance()

}

評價:開始的時候就建立乙個final型別的靜態例項物件,以後不會再改變。

3.雙重判斷

class singleton

public

static singleton getinstance()}}

return instance;

}}

評價:經過兩次判定,第一次檢測到例項為空時,增加同步,同步後再次檢測到例項為空時,才建立物件例項。有效防止了在多執行緒環境下建立多個例項的問題。

4.volatile 關鍵字的使用

private static volatile singleton singleton;

volatile 關鍵字的使用可以解決一定程度上的多執行緒訪問時出現的同步問題,保證一定程度的執行緒安全。如果整形的變數由volatile修飾,每次都直接從記憶體去獲取物件(不使用快取中的),所以保證了每次獲取到的都是最新的,執行緒間透明。

5.結合volatile的單例模式

class singleton

public

static singleton getinstance()}}

return instance;

}}

評價:在volatile 和synchronized 兩端執行緒安全的保護下,保證了多執行緒訪問情況下出現多個例項的問題。volatile 保證在例項物件建立後快速通知其他執行緒

該物件的例項已經存在,不需要重複建立了。主要突出了可見性。

Java單例模式的各種寫法和最優寫法推薦

話不多說,直接上 1 只適合單執行緒環境,懶漢模式 classsingletonpublic staticsingleton getinstance returninstance 評價 由於只生成乙個例項,為防止別人建立該類例項,構造方法為私有屬性,只有在例項物件為空時才去建立 為避免重複建立 餓漢...

單例模式的各種寫法

1.餓漢式單例模式 classname hungerysingleton description 餓漢式單例模式 author ymj date 2020 07 10 21 55 version v1.0 public class hungerysingleton public static hun...

玩轉單例模式的各種寫法和破解

餓漢式單例 public class hungry private final static hungry hungry newhungry public static hungry getinstance 懶漢式 public class lazyman private static lazyma...