Java 中單例模式的實現方法
簡介
單例模式是一種設計模式,旨在確保一個類在整個應用程序中僅存在一個實例。這種模式在控制共享資源的訪問、保持狀態和提供全局訪問點等方面非常有用。
實現方法
1. 餓漢式單例
立即學習“Java免費學習筆記(深入)”;
- 實例在類加載時即被創建。
- 優點:線程安全,實現簡單。
- 缺點:即使實例未被使用也會被創建,可能會浪費資源。
public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }
2. 懶漢式單例
- 實例僅在首次請求時創建。
- 優點:節省資源,只在需要時才創建實例。
- 缺點:線程不安全,需要同步措施。
public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
3. 雙重檢查鎖定
- 優化了懶漢式單例的實現方法。
- 使用 synchronized 在首次創建實例時進行同步,并使用 volatile 防止指令重排序。
- 優點:線程安全,性能較好。
public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
4. 枚舉單例
- 通過枚舉類實現單例模式。
- 枚舉類天生是單例且線程安全的。
- 優點:線程安全,使用簡便。
public enum Singleton { INSTANCE; public void doSomething() { // ... } }
5. 靜態內部類
- 使用靜態內部類實現單例模式。
- 靜態內部類僅在外部類被加載時才會被加載,確保了單例性。
- 優點:線程安全,延遲加載。
public class Singleton { private Singleton() {} private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }
選擇指南
選擇單例模式的實現方法應根據具體的應用需求:
- 餓漢式單例:適用于需要在應用程序啟動時就創建實例的情況。
- 懶漢式單例:適用于需要按需創建實例的情況。
- 雙重檢查鎖定:是一種優化了懶漢式單例的方法,性能較好。
- 枚舉單例:適用于需要線程安全且簡便易用的單例。
- 靜態內部類:適用于需要延遲加載的單例。
以上是關于在 Java 中如何實現單例模式以及幾種常見實現方法的詳細介紹。要了解更多內容,請關注編程學習網的其他相關文章!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END