單例模式有實現方式有懶漢式和餓漢式兩種,而懶漢式又面臨執行緒安全問題。在這裡學習一下單例模式的兩種經典的實現方式:innerclass和dubblecheck
靜態內部類不會隨著外部類的載入而載入 ,只有靜態內部類的靜態成員被呼叫時才會進行載入 , 這樣既保證的惰性初始化,又由jvm保證了多執行緒併發訪問的正確性。
public
class
singletion
public
static singletion getinstance()
}
public
class
dubblesingleton}}
return ds;
}}
第二次判空是防止多執行緒情況下發生以下情況:
a.假設:執行緒a已經經過第一次判斷,判斷singleton=null,準備進入同步**塊.
b.此時執行緒b獲得時間片,猶豫執行緒a並沒有建立例項,所以,判斷singleton仍然=null,所以執行緒b建立了例項singleton。
c.此時,執行緒a再次獲得時間片,猶豫剛剛經過第一次判斷singleton=null(不會重複判斷),進入同步**塊,這個時候,我們如果不加入第二次判斷的話,那麼執行緒a又會創造乙個例項singleton,就不滿足我們的單例模式的要求,所以第二次判斷是很有必要的。
單例模式 靜態內部類
靜態內部類是乙個很好的實現單例的方式 看 package cn.liz.syn public class staticinner 私有的靜態內部類 private static class inner 公共的 獲取例項的方法 public static staticinner getinstance...
單例模式 靜態內部類
1 2 單例模式 靜態內部類3 4public class singletontest0711 1213 14 靜態內部類實現方式 15 16class singleton 2324 25 2.寫乙個靜態內部類,直接返回singleton 26 27private static class sing...
單例模式之靜態內部類實現
單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的乙個類只有乙個例項。即乙個類只有乙個物件例項。最常用的單例模式有惡漢式和懶漢式兩種方式,除此之外還有一種通過靜態內部類實現的單例模式。原文摘自 1.示例 public class...