java 設計模式-單例模式-懶加載

首先推薦種最好的單例模式實現方式(沒有之一)

public class Manager {

    private Manager() {
        
    }
    
    public static Manager getInstance() {
        return ManagerHolder.instance;
    }
    
    private static class ManagerHolder {
        private static final Manager instance = new Manager();
    }
}

然後解釋下爲什麼要用這種方式:

* 內部類只在需要的時候纔會被類加載器加載,實現了懶加載,即在需要的時候才實例化出一個Manager,而且是唯一的一個

* 同時由於instance是static final類型,保證了內存中只有這樣一個實例存在,而且只能被賦值一次,從而保證了線程安全性

(即使在高併發的情況下多個線程同時訪問getInstance()方法 也能夠保證實例的唯一性)

其他沒有采用內部類的實現方式 以下是目前見過最好的:

public static class SingletonOptimizeLazy {
    static SingletonOptimizeLazy instance = null;
    public static SingletonOptimizeLazy getInstance() {
      if (instance == null) {
        createInstance();
      }
      return instance;
    }
    private synchronized static SingletonOptimizeLazy createInstance() {
      if (instance == null) {
        instance = new SingletonOptimizeLazy();
      }
      return instance;
    }
}

以上這種解決方式 主要思想是將實例化的過程抽象出來 放在一個sychronized方法中執行 這樣也能夠實現懶加載與併發安全

不過仍然推薦使用內部類的解決方案

發佈了6 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章