91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

黔南| 靖江市| 云林县| 元阳县| 蒙城县| 兴安县| 尼勒克县| 苏尼特左旗| 泗水县| 章丘市| 徐汇区| 安达市| 星座| 汕尾市| 四平市| 平罗县| 邹城市| 鲁山县| 罗城| 靖安县| 习水县| 兴和县| 苍山县| 黄大仙区| 阜阳市| 平乐县| 城固县| 阳城县| 磴口县| 黑龙江省| 鹤山市| 万州区| 罗甸县| 贡觉县| 楚雄市| 增城市| 开阳县| 武陟县| 安国市| 乌海市| 潼关县|