Java線程安全單例模式實現(xiàn)

一般來說,單例模式有五種寫法:懶漢、餓漢、雙重檢驗鎖、靜態(tài)內(nèi)部類、枚舉。所說都是線程安全的實現(xiàn)。
一般情況下直接使用餓漢式就好了,如果明確要求要懶加載(lazy initialization)會傾向于使用靜態(tài)內(nèi)部類,如果涉及到反序列化創(chuàng)建對象時會試著使用枚舉的方式來實現(xiàn)單例。

懶漢式
public final class Singleton {

    private static Singleton instance;

    private Singleton() {
        //
    }

    public static Singleton getInstance() {
        synchronized (Singleton.class) {
            if(instance == null) {
                instance = new Singleton();
            }
        }
        return instance;
    }
}
雙重檢驗鎖
public final class Singleton {

    //用volatile修飾對象,禁止指令重排序優(yōu)化
    private volatile static Singleton instance; 

    private Singleton() {
        //
    }

    public static Singleton getInstance() {
        if(instance == null) {
            synchronized (Singleton.class) {
                if(instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
餓漢式
public final class Singleton {

    //類加載時就初始化
    private static final Singleton instance = new Singleton();

    private Singleton() {
        //
    }

    public static Singleton getInstance() {
        return instance;
    }
}
靜態(tài)內(nèi)部類
public final class Singleton {

    private Singleton() {
        //
    }

    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
枚舉
public enum EnumSingleton {

    INSTANCE;

    private EnumSingleton() {

    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 場景問題# 1.1 讀取配置文件的內(nèi)容## 考慮這樣一個應(yīng)用,讀取配置文件的內(nèi)容。 很多應(yīng)用項目,都有與應(yīng)用相...
    七寸知架構(gòu)閱讀 6,966評論 12 68
  • 單例模式(SingletonPattern)一般被認(rèn)為是最簡單、最易理解的設(shè)計模式,也因為它的簡潔易懂,是項目中最...
    成熱了閱讀 4,530評論 4 34
  • 一、前言 作為對象的創(chuàng)建模式,單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。這個類稱為...
    manimaniho閱讀 490評論 0 0
  • 什么是單例模式 什么是單例模式呢? 我們引用一下維基百科: 單例模式,也叫單子模式,是一種常用的軟件設(shè)計模式。在應(yīng)...
    莫那一魯?shù)?/span>閱讀 2,255評論 0 5
  • 感恩日記: 1.今天回到學(xué)校宿舍很驚喜地發(fā)現(xiàn)公用廁所被打掃得很干凈,真的超棒的。感謝為大家服務(wù)的好心人。想想能為別...
    Betty麗麗閱讀 228評論 0 2

友情鏈接更多精彩內(nèi)容