多線程高併發單例模式

內部類實例化static inner class

/**
 * 靜態內部類做單例
 *
 */
public class Singletion {

    private static class InnerSingletion {
        private static Singletion single = new Singletion();
    }

    public static Singletion getInstance(){
        return InnerSingletion.single;
    }

}

2次檢查實例化dubble check instance

public class DubbleSingleton {

    private static DubbleSingleton ds;

    public  static DubbleSingleton getDs(){
        if(ds == null){
            //【等待位置】
            synchronized (DubbleSingleton.class) {
                if(ds == null){
                //初始化有可能耗時比較長,導致N個線程到達【等待位置】,如果這裏不第二次檢查ds,就會生成N個新實例對象。
                    ds = new DubbleSingleton();
                }
            }
        }
        return ds;
    }
}
發佈了91 篇原創文章 · 獲贊 3 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章