最近覺得把double check 模式僅僅理解成singleton的多執行緒版本限制了他的應用。下面談一下我的一些理解。
現實生活中對於一種臨界資源,我們常常採取的方式是事先了解一下他的使用情況,然後再決定是等待還是離開。比如去圖書館借書前我們會先了解一下需要的書是否在館內,去飯店吃飯我們會先問一下有沒有位子等等。儘管即使事先我們了解了情況,去了之後卻發現仍有別人比我們先來一步,但是這是合乎情理的,起碼我們還有些希望。
在多執行緒環境中,乙個執行緒就是乙個消費者物件,讓乙個不知情的執行緒等待是不合理的。按照物件導向的思想,這裡正是使用double check的時機!
if(!no_room())
unlock();
}這樣不是更擬人化一點麼,更重要的是這樣的應用場合幾乎隨處可見!
~end~
單例模式 DoubleCheck
1.單例模式理解 是為了滿足一些場景,乙個物件只能建立乙個例項物件的場景。流程 1.構造方法私有化,2.宣告物件 位靜態 3.類方法返回例項化後的物件。2.將單例模式分為兩類 懶漢式和餓漢式 懶漢式 特點在定義singleton是就new public class singleton public ...
單例模式與double check
本文主要是講double check,通常double check比較少用,一般是在高併發的情況下。但是建議大家寫單例的時候都用上。單例模式分兩種 餓漢式與懶漢式,餓漢式是指在類載入時就進行例項化,而懶漢式是指在使用時才進行例項化。如下 餓漢式 public class singleton publ...
設計模式單例模式之double check
設計模式之雙重判定鎖 double check 下面列出乙個比較常用的也是我個人最喜歡的一種在多執行緒的情況下,又能滿足lazy loading,效率又高的一種單例模式的寫法 class singleton 在這可能有些小夥伴會問這個volatile這個是幹啥的,給出答案 volatile這個關鍵字...