單例模式與執行緒安全
一。餓漢模式(立即載入)
立即載入就是使用類的時候已經將物件建立完畢。呼叫方法前,例項已經被建立了。
public class myobject;
public static myobject getinstance()
}二。懶漢模式(延遲載入,執行緒不安全)
延遲載入是指在呼叫方法時例項才被建立。
public class myobject;
public static myobject getinstance()else
return myobject;}}
這種實現方式在多執行緒的情況下可能會建立出多個例項。並不是執行緒安全的。
三。懶漢模式(執行緒安全解決方案)
①宣告synchronized關鍵字
既然多個執行緒可以同時進入getinstance()方法,那麼只需要對getinstance()方法宣告synchronized關鍵字即可。
public class myobject;
//這樣設定同步方法效率太低了
//整個方法被上鎖了
synchronized public static myobject getinstance()else
return myobject;}}
②使用dcl雙檢查鎖機制
public class myobject;
public static myobject getinstance()else
}
}
}catch(exception e)
return myobject;
}
四。靜態內部類
即實現了延遲載入,又保證了執行緒安全。
public class myobject
private myobject(){};
public static myobject getinstance()
}五。使用static**塊來實現單例模式
靜態**塊中的**在使用類的時候就已經執行了,所以可以應用靜態**塊的這個特性來實現單例設計模式。
public class myobject;
static;
public static myobject getinstance()
}六。使用列舉資料型別實現單例模式
public enum enumobject catch(exception e)
}public connection getconnection()
}
JAVA設計模式(四)單例模式
size medium b 單例模式 b size 確保乙個類只有乙個例項,並提供乙個全域性訪問站點。類圖 img 1.執行緒不安全的單例模式 單例模式 執行緒不安全 public class singletontest public static singletontest getinstance...
Java併發程式設計 單例模式執行緒安全問題
單例模式是指對乙個物件進行一次例項化,然後全域性都可以呼叫該例項化物件來完成專案的開發。在計算機系統中,執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,以...
單例模式併發
在研究單例模式的時候,為了保證單例的懶載入是同步的,我們通常會選擇乙個duoble check的方法來保證只有第一次才new物件。1.雙重檢測同步延遲載入 如下 關於volatile的作用在這裡就是保證在new出物件的那一立馬寫入主存,同時通知其他執行緒的他們的cache是無效的,這樣instanc...