Java19單例模式

通過某個類創(chuàng)建對象時,在整個程序中,只能創(chuàng)建一個對象,這種類稱為單例類。

餓漢式(類一旦加載,單例就初始化完成,保證調(diào)用getInstance的時候,單例已經(jīng)存在)

單例類會一直占用資源

package com.javawu.singleton;
public class Singleton{

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

懶漢式(延遲加載,調(diào)用getInstance的時候才回去初始化這個單例)

package com.javawu.singleton;

public class Singleton{
#2.聲明類的靜態(tài)變量(靜態(tài)變量跟對象無關)
    private static Singleton singleton = null;
    
#1.使用private修飾默認的構造方法(類外部不能使用new創(chuàng)建對象)
    private Singleton () {
        // TODO 自動生成的構造函數(shù)存根
    }
#3.創(chuàng)建返回對象的方法
#4.判斷,對象存在不再創(chuàng)建
#5.(1)為了保證線程同步,改為同步方法(每次調(diào)用都會做線程同步)
    public static synchronized Singleton getInstance() {
        if(singleton == null) {
            singleton = new Singleton ();
        }
        return singleton;
    }
#5.(2)雙重檢查鎖定(和1相比只有第一次調(diào)用單例的時候才會做線程同步)
//使用雙重檢查鎖定,signleton需要用volatile修飾
//即 private volatile static Singleton sigleton = null;
//詳見:http://www.iteye.com/topic/652440
    public static Singleton getInstance() {
        if(singleton == null) {
            synchronized(Singleton.class) {
                if(singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
#5.(3)靜態(tài)內(nèi)部類(3種延遲加載方式中最優(yōu)的)
    public static Singleton getInstance() {
        private static class Holder {
            private static final Singleton instance = new Singleton();
        }
        private Singleton() {
        }
        public static final Singleton getInstance() {
            return Holder.instance;
        }
    }
}

據(jù)稱還有一個最佳的單例實現(xiàn)方法--單個成員的枚舉

package com.javawu.singleton;

public enum Singleton {
    //定義一個枚舉元素
    instacnce;
    //這個單例類具有的方法
    public void method() {
        
    }
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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