單例模式
單例模式是比較常用和容易理解的一種設計模式,目的是乙個單例物件的類只允許存在乙個例項。
常用的例如資料庫連線池和多執行緒的執行緒池就是單例模式的。
單例模式的幾種實現方式:
餓漢模式:
/*** created by j on 2018/3/1. */
public class
singleton
private
singleton
() {} }
這種方式 因為定義例項為靜態的,所以在虛擬機器對該類進行裝載的時候就會生成例項。屬於常用的方式,但是缺點在於如果不需要呼叫該例項會對記憶體造成浪費。
非執行緒安全-懶漢模式:
/*** created by j on 2018/3/1.
*/
public class
singleton
return
singleton
; }
private
singleton
() {} }
顧名思義,就是在不需要該例項的時候不建立,只有在第一次用到的時候會建立該例項,但是此方式不建議使用,因為是非執行緒安全的,如果多執行緒同時獲取例項,並且在同時驗證例項為空時通過,會建立兩個例項。
執行緒安全-同步-懶漢模式:
public class
singleton
return
singleton
; }
private
singleton
() {} }
在獲取物件的例項方法上通過synchronized關鍵字為該方法新增同步鎖,這樣可以保證只有乙個執行緒會呼叫該方法,但是如果多執行緒同時過來時就會發生執行緒堵塞,造成效率效能的極度下降,所以不建議採用此方式。
非執行緒安全-同步**塊-懶漢模式:
/*** created by j on 2018/3/1.
*/
public class
singleton }
return
singleton
; }
private
singleton
() {} }
當多個執行緒同時進入到null判斷之後,雖然鎖的是**塊,但是還會執行兩次例項化。
雙重檢查模式
/*** created by j on 2018/3/1. */
public class
singleton }
}return
singleton
; }
private
singleton
() {} }
這樣可以保證是執行緒安全的。
靜態內部類模式
/*** created by j on 2018/3/1. */
public class
singleton
private static class
singletonins
public static
singleton
getinstance
() }
這樣與餓漢模式相似,該模式是懶載入模式,餓漢模式在類被裝載時建立例項,而該模式,只有在呼叫getinstance時才會裝載靜態內部類,然後建立例項。
Java設計模式 單例模式
單例模式 singleton 顧名思義,就是乙個類只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。從具體...
java設計模式 單例模式
這個模式是很有意思,而且比較簡單,但是我還是要說因為它使用的是如此的廣泛,如此的有人緣,單例就是單 一 獨苗的意思,那什麼是獨乙份呢?你的思維是獨乙份,除此之外還有什麼不能山寨的呢?我們舉個比較難複製的物件 皇帝中國的歷史上很少出現兩個皇帝並存的時期,是有,但不多,那我們就認為皇帝是個單例模式,在這...
java設計模式 單例模式
單例模式介紹 單例模式分 懶漢式單例 餓漢式單例。單例模式有一下特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例有併發問題,只有乙個例項,多個執行緒就可能同...