Volatile的應用場景

通過對一個單列模式的應用場景,進行解析
1.普通的單列模式:
在這裏插入圖片描述
在多線程的情況下,就會出現了問題。
在這裏插入圖片描述
很顯然,出現了問題。在多線程的情況下,需要進行改進了。
2.通過Sysnchronized進行解決。
在這裏插入圖片描述
使用這個方法,可以解決。但是會有個問題,當然,要千萬級別纔會出現。就是重排序問題。
3.解決方案,使用Volation

   //懶漢模式
    private static volatile VolatileDemo4 instance = null;

    private VolatileDemo4() {
        System.out.println("創建單列模式" + Thread.currentThread().getName());
    }

    //DCL(Double check Lock 雙端鎖機制)
    public static VolatileDemo4 getInstance() {
        if (instance == null) {
            synchronized (VolatileDemo4.class) {
                if (instance == null) {
                    instance = new VolatileDemo4();
                }
            }
        }
        return instance;
    }

    public static void main(String[] args) {

        for (int i = 1; i <= 10; i++) {
            new Thread(() -> {
                VolatileDemo4.getInstance();
            }).start();
        }

    }

在這裏插入圖片描述
案例代碼地址在github:
https://github.com/virtuousOne/JavaBase

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