單例模式推薦使用(摘抄)

2021-09-16 18:07:09 字數 926 閱讀 4280

1.雙重檢查

public class singleton 

public static singleton getinstance() }}

return singleton;

}}

double-check概念對於多執行緒開發者來說不會陌生,如**中所示,我們進行了兩次if (singleton == null)檢查,這樣就可以保證執行緒安全了。這樣,例項化**只用執行一次,後面再次訪問時,判斷if (singleton == null),直接return例項化物件。

優點:執行緒安全;延遲載入;效率較高。

2.靜態內部類

public class singleton 

private static class singletoninstance

public static singleton getinstance()

}

這種方式跟餓漢式方式採用的機制類似,但又有不同。兩者都是採用了類裝載的機制來保證初始化例項時只有乙個執行緒。不同的地方在餓漢式方式是只要singleton類被裝載就會例項化,沒有lazy-loading的作用,而靜態內部類方式在singleton類被裝載時並不會立即例項化,而是在需要例項化時,呼叫getinstance方法,才會裝載singletoninstance類,從而完成singleton的例項化。

類的靜態屬性只會在第一次載入類的時候初始化,所以在這裡,jvm幫助我們保證了執行緒的安全性,在類進行初始化時,別的執行緒是無法進入的。

優點:避免了執行緒不安全,延遲載入,效率高。

3.列舉

public enum singleton 

}

借助jdk1.5中新增的列舉來實現單例模式。不僅能避免多執行緒同步問題,而且還能防止反序列化重新建立新的物件。

單例設計模式推薦

單例模式主要是為了避免因為建立了多個例項造成資源的浪費,且多個例項由於多次呼叫容易導致結果出現錯誤,而使用單例模式能夠保證整個應用中有且只有乙個例項。從其名字中我們就可以看出所謂單例,就是單個例項也就是說它可以解決的問題是 可以保證乙個類在記憶體中的物件的唯一性,在一些常用的工具類 執行緒池 快取,...

單例模式 靜態內部類實現(推薦使用)

使用場景 package com.test public class singleton innerclass 私有構造方法 private singleton innerclass 獲得物件例項 public static singleton innerclass getinstance 優點 1...

單例模式 單例模式

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