Java設計模式 單例模式

2021-09-09 06:30:06 字數 1092 閱讀 6660

乙個類有且僅有乙個例項,並且自行例項化向整個系統提供。

package com.singleton;

//此為懶漢式 單例,但不是執行緒安全的

public class singleton

public static singleton getinstance()

return singleleton;//把唯一物件例項返回

}}

package com.singleton;

public class hungrysingleton

// 餓漢模式在類載入的時候,物件就已經被例項化

private static hungrysingleton hungrysingleton = new hungrysingleton();

// 獲取例項的方法

public static hungrysingleton getinstance()

}

這⾥實現了懶漢式的單例,但是熟悉多執行緒併發程式設計的朋友應該可以看出,在多執行緒併發下這樣的實現是⽆法保證例項例項唯⼀的(即執行緒不安全),甚⾄可以說這樣的實現是完全錯誤的,下⾯我們就來看⼀下多執行緒併發下的執⾏情況,這⾥為了看到效果,我們對上⾯的**做⼀⼩點修改:

package com.singleton;

public class dclsingleton

public static dclsingleton getinstance() else }}

} catch (interruptedexception e)

return dclsingleleton;

}}

以上為double check locking 雙檢查鎖機制(推薦使用)為了達到執行緒安全,⼜能提⾼**執⾏效率。

這⾥在宣告變數時使⽤了volatile關鍵字(關於volatile關鍵字解析)來保證其執行緒間的可⻅性;在同步**塊中使⽤⼆次檢查,以保證其不被重複例項化。集合其⼆者,這種實現⽅式既保證了其⾼效性,也保證了其執行緒安全性。

另外說明這裡所加的「thread.sleep(300);」是為了檢驗測試,實際編寫中不用新增

Java設計模式 單例模式

單例模式 singleton 顧名思義,就是乙個類只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。從具體...

java設計模式 單例模式

這個模式是很有意思,而且比較簡單,但是我還是要說因為它使用的是如此的廣泛,如此的有人緣,單例就是單 一 獨苗的意思,那什麼是獨乙份呢?你的思維是獨乙份,除此之外還有什麼不能山寨的呢?我們舉個比較難複製的物件 皇帝中國的歷史上很少出現兩個皇帝並存的時期,是有,但不多,那我們就認為皇帝是個單例模式,在這...

java設計模式 單例模式

單例模式介紹 單例模式分 懶漢式單例 餓漢式單例。單例模式有一下特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例有併發問題,只有乙個例項,多個執行緒就可能同...