JAVA併發程式設計(四)單例模式與執行緒安全問題

2021-09-01 12:05:49 字數 1267 閱讀 3810

單例模式與執行緒安全

一。餓漢模式(立即載入)

立即載入就是使用類的時候已經將物件建立完畢。呼叫方法前,例項已經被建立了。

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