為什么要使用單例模式?
一些物件只需要一個,比方說:threadPool,cache,對話框,處理偏好設定和registry的物件,使用單例模式能夠再真正需要該物件的時候再創建,避免浪費資源,
經典單例模式
public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if(Objects.isNull(uniqueInstance)) { uniqueInstance = new Singleton(); } return uniqueInstance; } }
缺點:
多執行緒造成多個實體的風險,
解決方案1:
public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static synchronized Singleton getInstance() {
if(Objects.isNull(uniqueInstance)) { uniqueInstance = new Singleton(); } return uniqueInstance; }
}
缺點:
直接同步會使得執行緒每次都會被阻攔再該方法外,即使該物件已被實體化,
解決方案2:
public class Singleton { private static volatile Singleton uniqueInstance; private Singleton() {}
public static synchronized Singleton getInstance() {
// 檢查實體,如果不存在,就進入同步區塊 if(Objects.isNull(uniqueInstance)) {
synchronized(Singleton.class) {
// 進入區塊后,再檢查一次
if(uniqueInstance == null) { uniqueInstance = new Singleton();
}
} } return uniqueInstance; }
}
這種方法能夠解決多執行緒的問題又能兼顧性能
解決方案3:
public class Singleton { private static Singleton uniqueInstance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return uniqueInstance; } }
靜態變數直接初始化,適合那些初始化不怎么耗費資源的物件,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/165074.html
標籤:其他
上一篇:Python help函式
下一篇:python入門基礎練習(一)
