日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单例模式的五种写法

發布時間:2025/5/22 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单例模式的五种写法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、懶漢式,線程不安全
顧名思義就是實例在用到的時候才去創建,“比較懶”,用的時候才去檢查有沒有實例,如果有則返回,沒有則新建

public class Singleton {private static Singleton instance;private Singleton (){}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}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、餓漢式
餓漢式,從名字上也很好理解,就是“比較勤”,實例在初始化的時候就已經建好了,不管你有沒有用到,都先建好了再說。好處是沒有線程安全的問題,壞處是浪費內存空間

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

4、雙檢鎖/雙重校驗鎖(DCL,即 double-checked locking)
雙檢鎖,又叫雙重校驗鎖,綜合了懶漢式和餓漢式兩者的優缺點整合而成。看上面代碼實現中,特點是在synchronized關鍵字內外都加了一層 if 條件判斷,這樣既保證了線程安全,又比直接上鎖提高了執行效率,還節省了內存空間

public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }

5、登記式/靜態內部類
靜態內部類的方式效果類似雙檢鎖,但實現更簡單。但這種方式只適用于靜態域的情況,雙檢鎖方式可在實例域需要延遲初始化時使用

public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }

6、枚舉
枚舉的方式是比較少見的一種實現方式,但是看上面的代碼實現,卻更簡潔清晰。并且她還自動支持序列化機制,絕對防止多次實例化

public enum Singleton {INSTANCE;public void doSomething() {System.out.println("doSomething");}}public class Main {public static void main(String[] args) {Singleton.INSTANCE.doSomething();}}

好了,上面就是單例模式的五種主要寫法。我們來總結下,一般情況下,懶漢式(包含線程安全和線程不安全梁總方式)都比較少用;餓漢式和雙檢鎖都可以使用,可根據具體情況自主選擇;在要明確實現 lazy loading 效果時,可以考慮靜態內部類的實現方式;若涉及到反序列化創建對象時,大家也可以嘗試使用枚舉方式

總結

以上是生活随笔為你收集整理的单例模式的五种写法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。