在面試中,遇到手寫乙個單例,平時敲**沒問題,但是手寫。。。。亂七八糟,所以回來以後整理下單例
文章學習於
單例流程:
1.私有構造方法
2.建立單例物件
3.為外界提供獲取單例物件的方法
隨著不斷的優化,單例模式也越加豐富多彩。下面是我為聯絡手感而附上的**
/*** created by **
* 餓漢式
* 優點:簡單,執行緒安全
* 缺點:例項物件是static 在宣告的時候就會例項化,浪費資源
*/public classsingleton1
//建立例項物件
private static finalsingleton1singletoninstance=newsingleton1();
/*** 對外提供方法,返回例項物件
*@return
*/public staticsingleton1 getinatance()
}
/*** created by **
* 優點:用到的時候才去例項化,在一定程度上節約了資源
* 缺點:getinstance方法是用synchronized修飾的,該方法是同步的,為了保證執行緒安全,但是導致每次呼叫該方法的時候都會被同步,這樣會消耗不必要的資源(不必要的同步開銷)。所以這種模式一般不建議使用
*/public classsingleton2
private staticsingleton2 singletoninstatce
; //懶漢式
private static synchronizedsingleton2 getinstance()
returnsingletoninstatce
; }
}
/**/*** created by **
* 優點:第一次執行getinstance方法時才會例項化,資源利用率高,效率高。
* 缺點:偶爾失效(高併發條件下,由於jdk版本問題,在jdk1.5之前會失敗)
*/public classsingleton3
/*** 雙重鎖定
* getinstance()方法對singletoninstance進行兩次判空,對懶漢式進行了優化,只有在第一次例項化的時候才會走第二個分支,才會同步,避免了每次都同步造成的不必要的資源消耗。
*/public staticsingleton3 getinstance() }}
returnsingleinstance
; }
}
* created by **
*/public classsingleton4
public staticsingleton4 getinstance()
//第一次呼叫getinstance()方法的時候,虛擬機器才會載入singletonhoulder靜態內部類
public static classsingletonholder
單例模式理解
單例模式 三要素 1 私有的構造方法 2 私有的靜態的例項物件 3 公共的靜態的提供訪問方法 根據單例模式的建立時機可以將其分為兩種型別 1 懶漢模式 在系統初始化時不會做初始化,會在什麼時候使用到時做初始化操作。public class ehanmoshi private static lanha...
單例模式理解
摘要 本文首先概述了單例模式產生動機,揭示了單例模式的本質和應用場景。緊接著,我們給出了單例模式在單執行緒環境下的兩種經典實現 餓漢式 和懶漢式,但是餓漢式是執行緒安全的,而懶漢式是非執行緒安全的。在多執行緒環境下,我們特別介紹了五種方式來在多執行緒環境下建立執行緒安全的單例,即分別使用synchr...
理解單例模式
對單例模式這一部落格的理解。在多執行緒時不能正常工作,因為沒有加synchronized 所以嚴格來說不能算是單例模式。public class singleton public static singleton getinstance return instance public class si...