設計模式--單例模式--餓漢、懶漢、方法鎖、類鎖(雙判斷)和靜態內部類模式

1、餓漢

/**
 * 餓漢式
 */
public class Singleton {

    private static Singleton instance = new Singleton();//實在餓的慌,先吃了(先創建實例)

    private Singleton(){}

    public static Singleton getInstance() {
        return instance;
    }
}

2、懶漢

/**
 * 懶漢式
 */
public class Singleton {

    private static Singleton instance;//我還不餓,先不吃(不創建實例)

    private Singleton(){}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();//這會兒我餓了,我吃(需要時創建實例)
        }
        return instance;
    }
}

3、方法鎖

/**
 * 懶漢式(synchronized 方發鎖 )線程安全,人云效率低
 */
public class Singleton {

    private static Singleton instance;

    private Singleton(){}

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

4、類鎖(雙判斷)

/**
 * 雙重判斷 類鎖 synchronized (Singleton.class) 線程安全 效率高
 */
public class Singleton {

    private static Singleton instance = null;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {//一次判斷
            synchronized (Singleton.class) {//鎖
                if (instance == null) {//二次判斷
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

5、靜態內部類

/**
 * 靜態內部類單例模式,線程安全?
 */
public class Singleton {

    private Singleton(){}

    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }

    /**
     * 靜態內部類
     */
    private static class SingletonHolder{
        private static final Singleton instance = new Singleton();//靜態內部類內部實例化
    }

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