單例的目的是保證某個類僅有乙個例項。當有某些類建立物件記憶體開銷較大時可以考慮使用該模式。單例模式又分為餓漢式和懶漢式。下面分別說明:
1.餓漢式。顧名思義,該模式在類被載入時就會例項化乙個物件。具體**如下:
public class person
public static person getinstance()
}該模式能簡單快速的建立乙個單例物件,而且是執行緒安全的(只在類載入時才會初始化,以後都不會)。但它有乙個缺點,就是不管你要不要都會直接建立乙個物件,會消耗一定的效能(當然很小很小,幾乎可以忽略不計,所以這種模式在很多場合十分常用而且十分簡單)
2.懶漢式。該模式只在你需要物件時才會生成單例物件(比如呼叫getinstance方法)
public class user
public static user getinstance()
return user;}}
看上去,這段**沒什麼明顯問題,但它不是執行緒安全的。
假設當前有n個執行緒同時呼叫getinstance()方法,由於當前還沒有物件生成,所以一部分同時都進入step 2,
那麼就會由多個執行緒建立多個多個user物件。
解決辦法:使用synchronized關鍵字。經改造上面**展示如下:
public class user
public static user getinstance()}}
return user;}}
通過上面的鎖機制同步**塊就可以寫出執行緒安全的懶漢式單例。
單例模式 懶漢式 和 餓漢式
單例模式三要素 a 私有構造方法 這樣外界就沒辦法建立物件 b 私有靜態引用指向自己例項 c 以自己例項為返回值的公有靜態方法 對外暴露介面獲取例項 在spring中建立的bean例項預設都是單例模式存在的。所謂 懶漢式 與 餓漢式 的區別,是在與建立單例物件的時間不同。懶漢式 是在你真正用到的時候...
單例模式 餓漢式和懶漢式
1.單例模式。singleton無論外界有多少物件都是乙個指向同乙個位址。節約空間。1 構造方法私有化 2 在本類中建立乙個static修飾的物件。3 所有的屬性必須私有化。4 通過乙個方法來把本類中建立的該物件返回。2.餓漢式 指全域性的單例例項在類裝載時構建。class people publi...
單例模式(餓漢式和懶漢式)
單例模式 餓漢式和懶漢式 餓漢式單例模式,static表變數會在裝載時初始化,不會涉及多個執行緒物件訪問該物件的問題,虛擬機器只會保證裝載一次該類,不會發生併發的問題,可以省略synchronized關鍵字 缺點 如果只是載入本類,而不是呼叫getinstance方法,永遠不呼叫,則會造成資源浪費的...