單例模式在《設計模式》中的定義為「保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。」
餓漢式在類裝載時便完成例項化,注意:單例模式的建構函式都是私有的。
懶漢式如果要保證執行緒安全,則要在getinstance()方法上加上synchronized關鍵字,並且還要在內部判斷是否已經建立過例項。不過這樣效率低,每次都要獲取和釋放鎖。public
class
hungryman
public
static hungryman getinstance()
}
雙重檢測即優化版的懶漢式,不同的是將synchronized放在了方法內部,通過雙重檢測提公升了效率。public
class
lazyman
public
synchronized
static lazyman getinstance()
return instance;
}}
為什麼要使用volatile?因為物件的建立不具備原子性,所以要避免其重排序而導致空指標,同時也保證了可見性。
靜態內部類中定義乙個靜態常量的例項,放在常量池中,這樣就可以由jvm保證只生成乙個例項。public
class
doublecheck
public
static doublecheck getinstance()
}}return instance;
}public
static
void
main
(string[
] args)
}
最簡單,也是最推薦使用的public
class
staticinterior
private
static
class
singletoninstance
public
static staticinterior getinstance()
}
public
enum enumsingleton
單例模式幾種寫法
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 singleinstance1 private static singleinstance1 instance public static singleinstance1 getinstance return instance 該程式缺點是執行緒不安全 publ...