java中的單例模式

單例模式是每個java程序員最先接觸到設計模式之一,因爲他結構簡單。這裏也不多說了簡單寫一個單例模式的Demo

package com.lyk;
public class SingletonDemo {

    //私有化構造方法
    private SingletonDemo() {
    }

    //static隨着類的加載而加載一次
    private static SingletonDemo singletonDemo = new SingletonDemo();

    //這個方法一定是static的因爲他要使用SingletonDemo類直接調用
    public static SingletonDemo getInstance() {
        return singletonDemo;
    }
}


單例模式有一個坑,就是懶漢式,上面寫的是餓漢式,我再寫一個懶漢式,對比說一下
package com.lyk;
public class SingletonDemo {

    //私有化構造方法
    private SingletonDemo() {
    }

    //我在類的初始化的時候,我只創建了一個null的對象
    private static SingletonDemo singletonDemo = null;

    //這個方法一定是static的因爲他要使用SingletonDemo類直接調用
    public static SingletonDemo getInstance() {
        //當高併發的時候,會出現很多線程同步到這個狀態,破壞了單例
        if (singletonDemo == null) {
            return new SingletonDemo();
        }
        return singletonDemo;
    }
}

顯然懶漢式問題很嚴重,他不能保證程序初始化時多線程併發訪問的單例狀態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章