註冊式threadlocal
問題作業
總結參考文件
單例模式是指在任何情況下都絕對只有乙個例項,並提供乙個全域性訪問點。屬於建立型模式。
單例模式的建立方式可分為以下四種:餓漢式、懶漢式、註冊式、threadlocal。
定義:在單例類首次載入時就建立例項。
特徵:私有化建構函式、提供全域性訪問點、靜態成員初始化
優點:執行效率高、執行緒安全
缺點:建立例項卻不使用造成記憶體浪費;系統啟動時大量單例被建立拉長了啟動時間。
定義:被外部類呼叫時才建立例項。
特徵:私有化建構函式、提供全域性訪問點
優點:節省記憶體、執行緒安全
缺點:效能低
第一次檢查是否需要阻塞執行緒,第二次檢查是否需要建立物件。
優點:節省記憶體、執行緒安全、效能高
缺點:可讀性差
instance =
newlazydoublechecksingleton()
;
該行**在jvm中包括三個操作:分配記憶體空間,執行建構函式,instance指向記憶體位址。
如果出現第二第三條指令重排的情況,那麼就會出現異常,因此需要volatile禁止指令重排。
優點:節省記憶體、執行緒安全、效能高、可讀性好
定義:將每乙個例項快取到統一的容器中,通過唯一標識獲取例項
包括列舉式與容器式兩種實現方式。
優點:執行緒安全、可讀性好
缺點:造成記憶體浪費
優點:節省記憶體
缺點:執行緒不安全。改進見作業
定義:保證執行緒內的全域性唯一
缺點:受限於當前執行緒
1.指令重排序問題: 編譯器指令重排序和cpu指令重排序
2.volatile:保證多執行緒共享變數可見性及禁止指令重排。
通過雙重檢查鎖保證執行緒安全
反射破壞部分單例形式,解決方式:在建構函式中判斷單例是否存在(部分單例方式需要考慮執行緒安全問題)
反序列化破壞所有單例形式(列舉類除外),解決方式:單例類中新增readresolve方法返回當前單例物件。
單例模式的要點如下:
1.私有化建構函式,提供全域性訪問點
2.延遲載入(節省記憶體)
3.保證執行緒安全
4.防止反射破壞
5.防止反序列化破壞
記憶體屏障
指令重排序
volatile
volatile2
架構師之路 理解設計模式
目錄 為什麼會有設計模式?設計模式的定義 設計模式的元素 設計模式的學習和運用 你曾經多少次有過這種感覺 你已經解決過了乙個問題,但就是不能確切知道是在什麼地方或怎麼解決的?如果你能記起以前問題的細節和怎麼解決它的,你就可以復用以前的經驗而不需要重新發現它。然而,我們並沒有很好記錄下可供他人使用的軟...
架構師應該掌握哪些設計模式
今天去參加了北京博文視點出版社在上海辦的乙個open party http www.douban.com event 11051981 其中有兩個topic給我很大的啟發,乙個是溫昱的 架構 設計的事實與謬誤 另乙個是老趙 jeffz cn 的 web應用中的快取 當然,我的收穫未必是他們兩位想要傳...
大話設計模式 架構師成長之路
大話設計模式 架構師成長之路 第八章 關注物件之間的通訊 行為型模式應用 上 8.1 三十六計 玩轉策略模式和應用場景.mp4 42.78m 8.2 策略設計模式實戰之電商多場景 活動方案.mp4 190.41m 8.3 大象裝進冰箱分幾步模板方法設計模式介紹.mp4 81.58m 8.4 專案里程...