Java設計模式 單例模式

2021-07-16 01:28:25 字數 1225 閱讀 5825

public

class singleton

public

static singleton getinstance()

return uniqueinstance;

}// other useful methods here

}

存在的問題:

但是,上面並不能處理多執行緒問題,如果現在有兩個執行緒同時在執行getinstance方法,第乙個執行緒剛執行完if (uniqueinstance == null)還沒執行uniqueinstance = new singleton();這個時候第二個執行緒也執行到if (uniqueinstance == null),它會發現uniqueinstance還是null,於是進入到了if判斷裡面。這樣你的單例模式就失敗了,因為建立了兩個不同的例項。

解決辦法

加鎖:synchronized,**如下:

public

class singleton

public

static synchronized singleton getinstance()

return uniqueinstance;

}// other useful methods here

}

存在的問題:

現在雖然解決了多執行緒導致有可能產生多個例項的情況,但是每次去執行getinstace方法的時候都會受到同步鎖的影響,這樣執行的效率會降低

解決辦法:

將synchronized關鍵字從方法宣告中去除,把它加入到方法體當中,先檢查例項是否已經建立,如果尚未建立才進行同步,這樣一來,只有第一次才會同步,**如下:

public

class singleton

public

static singleton getinstance() }}

return uniqueinstance;

}}

注意:volatile關鍵字確保,當uniqueinstance變數被初始化成singleton例項時,多個執行緒正確地處理uniqueinstance變數

Java設計模式 單例模式

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

java設計模式 單例模式

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

java設計模式 單例模式

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