Java實現(xiàn)單例模式的五種方式總結
如何實現(xiàn)一個單例
1、構造器需要私有化
2、提供一個私有的靜態(tài)變量
3、暴露一個公共的獲取單例對象的接口
需要考慮的兩個問題
1、是否支持懶加載
2、是否線程安全
1、餓漢式
public class EagerSingleton { private static final EagerSingleton INSTANCE = new EagerSingleton(); private EagerSingleton(){} public EagerSingleton getInstance(){ return INSTANCE; } }
不支持懶加載
線程安全
2、懶漢式
public class LazySingleton { private static LazySingleton INSTANCE; private LazySingleton() { } public static LazySingleton getInstance() { if (INSTANCE == null) { INSTANCE = new LazySingleton(); } return INSTANCE; } }
支持懶加載
線程不安全
public class LazySingleton { private static LazySingleton INSTANCE; private LazySingleton() { } public static synchronized LazySingleton getInstance() { if (INSTANCE == null) { INSTANCE = new LazySingleton(); } return INSTANCE; } }
支持懶加載
線程安全
3、雙重檢查鎖
public class DoubleCheckSingleton { private static DoubleCheckSingleton INSTANCE; private DoubleCheckSingleton() { } public DoubleCheckSingleton getInstance() { if (INSTANCE == null) { synchronized (DoubleCheckSingleton.class) { if (INSTANCE == null) { INSTANCE = new DoubleCheckSingleton(); } } } return INSTANCE; } }
支持懶加載
線程安全
4、靜態(tài)內部類
public class InnerSingleton { private InnerSingleton() { } public static InnerSingleton getInstance() { return Singleton.INSTANCE; } private static class Singleton { private static final InnerSingleton INSTANCE = new InnerSingleton(); } }
支持懶加載
線程安全
5、枚舉
public enum EnumSingleton { INSTANCE; }
總結
到此這篇關于Java實現(xiàn)單例模式的五種方式的文章就介紹到這了,更多相關Java實現(xiàn)單例模式方式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何在spring boot項目中使用Spring Security的BCryptPasswordE
本文介紹如何在Spring Boot項目中通過修改pom.xml引入安全依賴,添加配置類以解除默認的HTTP請求攔截,以及如何創(chuàng)建BCryptPasswordEncoder對象進行密碼的加密和匹配,通過這些步驟,可以有效地增強應用的安全性2023-08-08mybatis?@InsertProvider報錯問題及解決
這篇文章主要介紹了mybatis?@InsertProvider報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Java使用poi-tl設置word圖片環(huán)繞方式為浮于在文字上方
POI-TL 是一個基于 Apache POI 的 Java 庫,專注于在 Microsoft Word 文檔(.docx 格式)中進行模板填充和動態(tài)內容生成,下面我們看看如何使用poi-tl設置word圖片環(huán)繞方式為浮于在文字上方吧2025-03-03Java中將UUID存儲為Base64字符串的方法實現(xiàn)
使用Base64編碼來對UUID存儲在一些特定的場合被廣泛的使用,本文主要介紹了Java中將UUID存儲為Base64字符串的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-04-04Java基于循環(huán)遞歸回溯實現(xiàn)八皇后問題算法示例
這篇文章主要介紹了Java基于循環(huán)遞歸回溯實現(xiàn)八皇后問題算法,結合具體實例形式分析了java的遍歷、遞歸、回溯等算法實現(xiàn)八皇后問題的具體步驟與相關操作技巧,需要的朋友可以參考下2017-06-06Java搭建簡單Netty開發(fā)環(huán)境入門教程
這篇文章主要介紹了Java搭建簡單Netty開發(fā)環(huán)境入門教程,有詳細的代碼展示和maven依賴,能夠幫助你快速上手Netty開發(fā)框架,需要的朋友可以參考下2021-06-06