單例模式的幾種寫法

2021-09-01 05:17:48 字數 1484 閱讀 5101

1.懶漢式

public class singleinstance1 

private static singleinstance1 instance;

public static singleinstance1 getinstance()

return instance;

}}

該程式缺點是執行緒不安全

public class singleinstance1 

private static singleinstance1 instance;

public synchronized static singleinstance1 getinstance()

return instance;

}}

以上程式執行緒安全,但效率太低 

2.餓漢式

public class singleinstance2 

private static singleinstance2 instance = new singleinstance2();

public static singleinstance2 getinstance()

}

改程式避免了每次呼叫getinstance方法時產生的同步開銷

3.延長初始化佔位類模式

public class singleinstance3 

private static class singleinstance3holder

public static singleinstance3 getinstance()

}

只有當真正使用singleinstance3holder 類是才會初始化,並且由於是靜態初始化,所以不需要同步

4.dcl

public class singleinstance4 

private static singleinstance4 instance;

public static singleinstance4 getinstance()

}} return instance;

}}

該程式的缺點是得到的例項物件可能是乙個失效的物件,因為不能保證例項物件的所有成員變數被正確完整的進行了初始化

5.dcl改進

public class singleinstance5 

private static volatile singleinstance5 instance;

public static singleinstance5 getinstance()

}} return instance;

}}

加入volatile關鍵字可以保證該物件的可見性,已使執行緒得到該物件的最新值

綜上,建議使用延遲初始化佔位類模式的單利模式

單例模式幾種寫法

1.餓漢式 public class singleton public static singleton getinstance 2.懶漢式 public class singleton 雙層檢測鎖 public static singleton getinstance return instanc...

單例模式的幾種寫法

所謂單例模式就是確保某乙個類只有乙個例項,並且提供乙個全域性訪問點。例如 執行緒池 快取 對話方塊等等 1 餓漢模式 保證執行緒安全 public class singleton public static singleton getinstance 2 懶漢模式 不保證執行緒安全 public c...

單例模式的幾種寫法

1.餓漢式 public class singleton 宣告成員變數 private static singleton singleton new singleton 對外提供介面獲取該例項 public static singleton getinstance 2.懶漢式 public clas...