單例模式之靜態內部類

談到單例模式,首先需要說明一下,單例模式(Singleton Pattern)是JAVA中最簡單的設計模式之一。這種類型的設計模式屬於創建型模式。保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。

要實現一個線程安全的單例模式有多種做法。常見的有懶漢式、餓漢式、雙檢鎖/雙重校驗鎖、靜態內部類、枚舉等方式。每種方式都有優缺點,並不偏向某一種創建方式。具體情況具體分析,然後採用比較好的創建方式纔是最明智的選擇。

在這裏我採用靜態內部類方式來創建一個線程安全的單例模式。

package com.singleton.inner;

import java.util.Arrays;

/**
 * 線程安全的單例模式:
 * 靜態內部類方式,既不用加鎖,也能實現懶加載
 *
 * @author 小輝GE/小輝哥
 * <p>
 * 2019年8月7日 下午21:30:00
 */
public class Singleton {

    private Singleton() {
    }

    private static class InnerSingleton {
        private static final Singleton singleton = new Singleton();
    }

    public static Singleton getInstance() {
        return InnerSingleton.singleton;
    }

    public static void main(String[] args) {
        Thread[] th = new Thread[100];
        for (int i = 0; i < th.length; i++) {
            th[i] = new Thread(() -> {
                System.out.println(Singleton.getInstance().hashCode());
            });
        }
        Arrays.asList(th).forEach(o -> o.start());
    }

}

測試輸出結果如下(輸出結果比較多,我們只截取部分):

以上代碼僅供參考,如有不當之處,歡迎指出!!!

更多幹貨,歡迎大家關注和聯繫我。期待和大家一起更好的交流、探討技術!!!

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