單例模式

//餓漢式單例 單例模式通用代碼
public class Singleton1 {
    private static Singleton1 singleton1 = new Singleton1();
    private Singleton1(){}
    public static Singleton1 getIntance(){
        return singleton1;
    }
    public static void doSomething(){

    }
}
//懶漢式單例 不安全的單例
public class Singleton2 {
    private static Singleton2 singleton2 = null;
    private Singleton2(){}
    public static Singleton2 getSingleton2(){
        if (singleton2 == null){
            singleton2 = new Singleton2();
        }
        return singleton2;
    }
}

//雙重檢查
public class Singleton3 {
    //volatile 保持singleton3在各個線程是可見的
    private volatile static Singleton3 singleton3;
    private Singleton3(){}
    public static Singleton3 getSingleton3(){
        if (singleton3 == null){
            synchronized (Singleton3.class){
                if (singleton3 == null){
                    singleton3 = new Singleton3();
                }
            }
        }
        return singleton3;
    }
}
public class Singleton4 {
    private Singleton4(){}
    public static Singleton4 getSingleton4(){
        return SingleHolder.intance;
    }
    //靜態內部類在第一次被引用的時候加載
    private static class SingleHolder{
        private static Singleton4 intance = new Singleton4();
    }
}
發佈了32 篇原創文章 · 獲贊 7 · 訪問量 4918
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章