單例模式的實現需要考慮的因素有很多。對於常常出現的double-checked實現單例模式實際上是不安全的實現:
private static singleton instance;
public static singleton getinstance()
}
}
}
因為jit可以在singleton的構造方法被執行前即回傳給instance乙個引用,那麼這時其他併發執行緒可能剛剛好切換到執行權,那麼這時的第一次check就得到了這個未經初始化的引用,從而使這個半成品被不合理使用。
乙個權威的實現方式是initialization on demand holder (iodh):(懶漢式)
public class singleton
public static singleton getinstance()
}
可以實現只有需要的時候,才初始化,而且只需要初始化一次。
另外一種方式是:(餓漢式)
public class singleton
可以保證基本的單例要求。
但是這兩種模式依然需要考慮類的載入問題。首先是如果應用中存在各自使用兄弟關係的類載入器的兩個執行緒,各自在執行時呼叫getinstance,則因為singleton的類在兩個載入器中分別被載入初始化,因此兩線程將各自得到不同的例項,出現了在同乙個jvm多例項的情況;
因此如果要保證徹底地單例應該考慮類載入器的合理管理。
最後這兩種模式也需要考慮序列化的問題。如果單例支援序列化,應該重寫readresolve方法。同時要考慮私有化構造方法,以控制其他人直接構造化。
單例模式的實現
單例設計模式保證類在記憶體中只存在乙個物件。根據不同的策略,單例類的實現有以下幾種方式。1.立即載入 在載入類的同時例項化物件,設計要點如下 1 私有化構造方法 2 宣告並例項化本類物件 靜態 3 提供公有靜態方法獲取物件。code 1 public class eagersingleton oth...
單例模式的實現
單例模式估計是咱們碰到最多也是最簡單的一種設計模式了 也是面試中經常會遇到的面試題 單例模式保證乙個類只有乙個例項,比如咱們在android應用中登入成功之後儲存使用者資訊就會優先考慮單例模式。單例模式有六種常規的寫法 餓漢式 懶漢式 執行緒不安全 懶漢式 執行緒安全 dcl雙重校驗模式 靜態內部類...
單例模式的實現
單例 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式是一種常用的軟體設計模式之一,其目的是保證整個應用中只存在類的唯一個例項。比如我們在系統啟動時,需要載入一些公共的配置資訊,對整個應用程式的整個生命週期中都可見且唯一,這時需要設計成單例模式。如 spring容器,session工...