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...