單例模式 懶漢式 餓漢式和雙層鎖模式

2021-10-12 11:34:58 字數 1721 閱讀 4444

單例就是該類只能返回乙個例項。 單例所具備的特點: 1.私有化的建構函式 2.私有的靜態的全域性變數 3.公有的靜態的方法 單例分為懶漢式、餓漢式和雙層鎖式

/**懶漢式比較懶,只有當呼叫getinstance的時候,才回去初始化這個單例

* @author dym

* @date 2020/12/20 16:07

*/public class lazy

; private static lazy lazy = null;

public static lazy getinstance(

)return lazy;

}}

執行結果

所謂懶漢式,就是程式比較懶,只有需要他的時候,才會建立物件,如果有了,就不在建立,這個類的建構函式一定是私有的。所以在建立物件時,需要進行檢查,所以這時候很慢,一旦物件完成建立,載入類時,速度很快。至於餓漢式,就是這個類時刻準備著,一旦載入這個類,立馬建立物件,所有類很多的時候,載入顯的程式執行緩慢,這個類的建構函式也是私有的。

/**餓漢式就是類一旦載入,就把單例初始化完成,保證getinstance的時候,單例是已經存在的了

* @author dym

* @date 2020/12/20 16:09

*/public class hungry

private static hungry hungry = new hungry();

public static hungry getinstance(

)}

執行結果:

1、執行緒安全:

餓漢式天生就是執行緒安全的,可以直接用於多執行緒而不會出現問題,

懶漢式本身是非執行緒安全的,為了實現執行緒安全有幾種寫法。(如雙層鎖模式)

/**雙層鎖

*是否 lazy 初始化:是

*是否多執行緒安全:是

*實現難度:易

*描述:這種方式具備很好的 lazy loading,能夠在多執行緒中很好的工作,但是,效率很低,99% 情況下不需要同步。

*優點:第一次呼叫才初始化,避免記憶體浪費。

*缺點:必須加鎖 synchronized 才能保證單例,但加鎖會影響效率。

*getinstance(

) 的效能對應用程式不是很關鍵(該方法使用不太頻繁)。

* @author dym

* @date 2020/12/20 16:11

*/public class doublelock

private static doublelock doublelock ;

public static doublelock getinstance()}

}return doublelock;

}}

單例模式 懶漢式 和 餓漢式

單例模式三要素 a 私有構造方法 這樣外界就沒辦法建立物件 b 私有靜態引用指向自己例項 c 以自己例項為返回值的公有靜態方法 對外暴露介面獲取例項 在spring中建立的bean例項預設都是單例模式存在的。所謂 懶漢式 與 餓漢式 的區別,是在與建立單例物件的時間不同。懶漢式 是在你真正用到的時候...

單例模式 餓漢式和懶漢式

1.單例模式。singleton無論外界有多少物件都是乙個指向同乙個位址。節約空間。1 構造方法私有化 2 在本類中建立乙個static修飾的物件。3 所有的屬性必須私有化。4 通過乙個方法來把本類中建立的該物件返回。2.餓漢式 指全域性的單例例項在類裝載時構建。class people publi...

單例模式(餓漢式和懶漢式)

單例模式 餓漢式和懶漢式 餓漢式單例模式,static表變數會在裝載時初始化,不會涉及多個執行緒物件訪問該物件的問題,虛擬機器只會保證裝載一次該類,不會發生併發的問題,可以省略synchronized關鍵字 缺點 如果只是載入本類,而不是呼叫getinstance方法,永遠不呼叫,則會造成資源浪費的...