亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

synchronized和volatile關鍵字的作用是什么

發布時間:2021-07-23 15:44:40 來源:億速云 閱讀:157 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關synchronized和volatile關鍵字的作用是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1. 一個被volatile聲明的變量主要有以下兩種特性保證保證線程安全:

  1. 可見性。

  2. 有序性。

2. 在滿足以下兩個條件的情況下,volatile就能保證變量的線程安全問題:

  1. 運算結果并不依賴變量的當前值,或者能夠確保只有單一的線程修改變量的值。

  2. 變量面試中面試官經常會說:“單例模式了解嗎?來給我手寫一下!給我解釋一下雙重檢驗鎖方式實現單例模式的原理唄!”

3.雙重校驗鎖實現對象單例(線程安全)

public class Singleton {

    private volatile static Singleton uniqueInstance;

    private Singleton() {
    }

    public static Singleton getUniqueInstance() {
       //先判斷對象是否已經實例過,沒有實例化過才進入加鎖代碼
        if (uniqueInstance == null) {
            //類對象加鎖
            synchronized (Singleton.class) {
                if (uniqueInstance == null) {
                    uniqueInstance = new Singleton();
                }
            }
        }
        return uniqueInstance;
    }
}

另外,需要注意 uniqueInstance 采用 volatile 關鍵字修飾也是很有必要。 uniqueInstance 采用 volatile 關鍵字修飾也是很有必要的, uniqueInstance = new Singleton(); 這段代碼其實是分為三步執行:

  1. 為 uniqueInstance 分配內存空間

  2. 初始化 uniqueInstance

  3. 將 uniqueInstance 指向分配的內存地址 但是由于 JVM 具有指令重排的特性,執行順序有可能變成 1->3->2。指令重排在單線程環境下不會出現問題,但是在多線程環境下會導致一個線程獲得還沒有初始化的實例。例如,線程 T1 執行了 1 和 3,此時 T2 調用 getUniqueInstance() 后發現 uniqueInstance 不為空,因此返回 uniqueInstance,但此時 uniqueInstance 還未被初始化。 使用 volatile 可以禁止 JVM 的指令重排,保證在多線程環境下也能正常運行。

以上就是synchronized和volatile關鍵字的作用是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉首市| 抚宁县| 万山特区| 翁牛特旗| 临朐县| 永顺县| 左云县| 饶阳县| 塔城市| 重庆市| 石柱| 昔阳县| 台东县| 南平市| 科技| 吉林市| 莱阳市| 临潭县| 全州县| 务川| 汤原县| 北海市| 罗江县| 巫山县| 揭西县| 肇庆市| 咸丰县| 辉县市| 安吉县| 疏附县| 阳江市| 沁阳市| 大名县| 平安县| 嵊泗县| 运城市| 淅川县| 伽师县| 荣成市| 澄城县| 霍山县|