單例模式(Singleton)

一、初始化單例類時即創(chuàng)建單例
  • 餓漢式:(線程安全)
public class Singleton {
  private static Singleton instance = new Singleton();

  private Singleton() {
  }

  public static Singleton getInstance() {
    return instance;
  }
}
  • 枚舉類型:(線程安全)
public enum Singleton {
  INSTANCE;
}
二、按需、延遲創(chuàng)建單例
  • 懶漢式:(線程不安全)
public class Singleton {
  private static Singleton instance = null;

  private Singleton() {
  }

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
  • 懶漢式(同步鎖):(線程安全)
public class Singleton {
  private static Singleton instance = null;

  private Singleton() {
  }

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

  private Singleton() {
  }

  public static Singleton getInstance() {
    synchronized (Singleton.class) {
      if (instance == null) {
        instance = new Singleton();
      }
    }
    return instance;
  }
}
  • 懶漢式(雙重校驗鎖):(線程安全)
public class Singleton {
  private static Singleton instance = null;

  private Singleton() {
  }

  public static Singleton getInstance() {
    if (instance == null) {
      synchronized (Singleton.class) {
        if (instance == null) {
          instance = new Singleton();
        }
      }
    }
    return instance;
  }
}
  • 靜態(tài)內部類:(線程安全)【推薦使用】
public class Singleton {
  private static class Singleton2 {
    private static Singleton instance = new Singleton();
  }

  private Singleton() {
  }

  public static Singleton getInstance() {
    return Singleton2.instance;
  }
}
單例模式的實現(xiàn)方式對比.png

原文:單例模式(Singleton)- 最易懂的設計模式解析

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容