欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)單例模式的五種方式總結

 更新時間:2025年01月06日 09:22:39   作者:今天不coding  
這篇文章主要介紹了如何實現(xiàn)一個單例模式,包括構造器私有化、提供靜態(tài)私有變量和公共獲取實例接口,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

如何實現(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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java類實現(xiàn)日期的時間差的實例講解

    java類實現(xiàn)日期的時間差的實例講解

    在本篇文章里小編給大家整理的是一篇關于java類實現(xiàn)日期的時間差的實例講解內容,有興趣的朋友們可以學習下。
    2021-01-01
  • 如何在spring boot項目中使用Spring Security的BCryptPasswordEncoder類進行相同密碼不同密文的加密和驗證

    如何在spring boot項目中使用Spring Security的BCryptPasswordE

    本文介紹如何在Spring Boot項目中通過修改pom.xml引入安全依賴,添加配置類以解除默認的HTTP請求攔截,以及如何創(chuàng)建BCryptPasswordEncoder對象進行密碼的加密和匹配,通過這些步驟,可以有效地增強應用的安全性
    2023-08-08
  • mybatis?@InsertProvider報錯問題及解決

    mybatis?@InsertProvider報錯問題及解決

    這篇文章主要介紹了mybatis?@InsertProvider報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java使用poi-tl設置word圖片環(huán)繞方式為浮于在文字上方

    Java使用poi-tl設置word圖片環(huán)繞方式為浮于在文字上方

    POI-TL 是一個基于 Apache POI 的 Java 庫,專注于在 Microsoft Word 文檔(.docx 格式)中進行模板填充和動態(tài)內容生成,下面我們看看如何使用poi-tl設置word圖片環(huán)繞方式為浮于在文字上方吧
    2025-03-03
  • Java Set集合去重的原理及實現(xiàn)

    Java Set集合去重的原理及實現(xiàn)

    這篇文章主要介紹了Java Set集合去重的原理及實現(xiàn),幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-09-09
  • Java中將UUID存儲為Base64字符串的方法實現(xiàn)

    Java中將UUID存儲為Base64字符串的方法實現(xiàn)

    使用Base64編碼來對UUID存儲在一些特定的場合被廣泛的使用,本文主要介紹了Java中將UUID存儲為Base64字符串的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • SpringBoot整合log4j2日志的實現(xiàn)

    SpringBoot整合log4j2日志的實現(xiàn)

    在項目推進中,如果說第一件事是搭Spring框架的話,那么第二件事情就是在Sring基礎上搭建日志框架,大家都知道日志對于一個項目的重要性,尤其是線上Web項目,因為日志可能是我們了解應用如何執(zhí)行的唯一方式。此篇文章是博主在實踐中用Springboot整合log4j2日志的總結
    2021-06-06
  • Java基于循環(huán)遞歸回溯實現(xiàn)八皇后問題算法示例

    Java基于循環(huán)遞歸回溯實現(xiàn)八皇后問題算法示例

    這篇文章主要介紹了Java基于循環(huán)遞歸回溯實現(xiàn)八皇后問題算法,結合具體實例形式分析了java的遍歷、遞歸、回溯等算法實現(xiàn)八皇后問題的具體步驟與相關操作技巧,需要的朋友可以參考下
    2017-06-06
  • Java中創(chuàng)建ZIP文件的方法

    Java中創(chuàng)建ZIP文件的方法

    本文通過一段簡單代碼給大家介紹了java中創(chuàng)建zip文件的方法,代碼超簡單,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-06-06
  • Java搭建簡單Netty開發(fā)環(huán)境入門教程

    Java搭建簡單Netty開發(fā)環(huán)境入門教程

    這篇文章主要介紹了Java搭建簡單Netty開發(fā)環(huán)境入門教程,有詳細的代碼展示和maven依賴,能夠幫助你快速上手Netty開發(fā)框架,需要的朋友可以參考下
    2021-06-06

最新評論