Java實(shí)現(xiàn)單例模式的五種方式總結(jié)
如何實(shí)現(xiàn)一個(gè)單例
1、構(gòu)造器需要私有化
2、提供一個(gè)私有的靜態(tài)變量
3、暴露一個(gè)公共的獲取單例對(duì)象的接口
需要考慮的兩個(gè)問題
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)內(nè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;
}總結(jié)
到此這篇關(guān)于Java實(shí)現(xiàn)單例模式的五種方式的文章就介紹到這了,更多相關(guān)Java實(shí)現(xiàn)單例模式方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java設(shè)計(jì)模式之外觀模式的實(shí)現(xiàn)方式
這篇文章主要介紹了Java設(shè)計(jì)模式之外觀模式的實(shí)現(xiàn)方式,外觀模式隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個(gè)客戶端可以訪問系統(tǒng)的接口,這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它向現(xiàn)有的系統(tǒng)添加一個(gè)接口,來隱藏系統(tǒng)的復(fù)雜性,需要的朋友可以參考下2023-11-11
mybatis使用case when按照條件進(jìn)行更新方式
示例一通過條碼批量更新入庫和剩余數(shù)量,直接高效;示例二使用set和trim標(biāo)簽,實(shí)現(xiàn)動(dòng)態(tài)字段更新與條件優(yōu)化,結(jié)構(gòu)更復(fù)雜但靈活性更高2025-07-07
windows上nacos自啟動(dòng)的三種方法小結(jié)
本文主要給大家介紹了windows上nacos自啟動(dòng)的三種方法,借助WinSW.exe添加到服務(wù)列表,修改nacos啟動(dòng)配置以及以開機(jī)"啟動(dòng)"方式——啟動(dòng)Nacos的startup.cmd這三種方法,文中通過圖文講解的非常詳細(xì),需要的朋友可以參考下2023-12-12
Mybatis千萬級(jí)數(shù)據(jù)查詢的解決方式,避免OOM問題
這篇文章主要介紹了Mybatis千萬級(jí)數(shù)據(jù)查詢的解決方式,避免OOM問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
SpringBoot設(shè)置默認(rèn)主頁的方法步驟
這篇文章主要介紹了SpringBoot設(shè)置默認(rèn)主頁的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

