最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java那些鮮為人知的關(guān)鍵字volatile詳析

 更新時間:2021年03月05日 10:16:48   作者:Carson_Ho  
這篇文章主要給大家介紹了關(guān)于Java那些鮮為人知的關(guān)鍵字volatile的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在Java中,Java中volatile關(guān)鍵字十分重要

本文全面 & 詳細(xì)解析volatile關(guān)鍵字,希望你們會喜歡

目錄

1. 定義

Java 中的1個關(guān)鍵字 / 修飾符

2. 作用

保證 被 volatile修飾的共享變量 的可見性 & 有序性,但不保證原子性

3. 具體描述

下面,我將詳細(xì)講解 volatile是如何保證 “共享變量 的可見性 & 有序性,但不保證原子性”的具體原理

儲備知識:原子性、可見性 & 有序性

3.1 保證可見性

具體描述

volatile修飾的屬性保證每次讀取都能讀到最新的值

但不會 & 無法更新已經(jīng)讀了的值

原理

線程A在工作內(nèi)存中修改的共享屬性值會立即刷新到主存,線程B/C/D每次通過讀寫柵欄來達(dá)到類似于直接從主存中讀取屬性值

只是類似,網(wǎng)上有些說volatile修飾的變量讀寫直接在主存中操作,這種說法是不對的,只是表現(xiàn)出類似的行為

讀寫柵欄是一條CPU指令;插入一個讀寫柵欄 = 告訴CPU & 編譯器先于這個命令的必須先執(zhí)行,后于這個命令的必須后執(zhí)行(有序性)

讀寫柵欄另一個作用是強(qiáng)制更新一次不同CPU的緩存。例如,一個寫柵欄會 把這個柵欄前寫入的數(shù)據(jù)刷新到緩存,以此保證可見性

3.2 保證有序性

具體描述

當(dāng)對volatile修飾的屬性進(jìn)行讀/寫操作時,其前面的代碼必須已執(zhí)行完成 & 結(jié)果對后續(xù)的操作可見

原理

重排序時,以volatile修飾屬性的讀/寫操作代碼行為分界線,讀/寫操作前面的代碼不許排序到后面,后面同理不許排序到前面。由此保證有序性

3.3 不保證原子性

具體描述

volatile修飾的屬性若在修改前已讀取了值,那么修改后,無法改變已經(jīng)復(fù)制到工作內(nèi)存的值

即無法阻止并發(fā)的情況

原理

// 變量a 被volatile修飾 
volatile static int a=0;
a++;
// 包含了2步操作:1 = 讀取a、2= 執(zhí)行a+1 & 將a+1結(jié)果賦值給a
// 設(shè):線程A、B同時執(zhí)行以下語句,線程A執(zhí)行完第1步后被掛起、線程B執(zhí)行了a++,那么主存中a的值為1
// 但線程A的工作內(nèi)存中還是0,由于線程A之前已讀取了a的值 = 0,執(zhí)行a++后再次將a的值刷新到主存 = 1
// 即 a++執(zhí)行了2次,但2次都是從0變?yōu)?,故a的值最終為1

4. 應(yīng)用場

由于volatile保證可見性和有序性,被volatile修飾的共享屬性一般并發(fā)讀/寫沒有問題,可看做是一種輕量級的synchronized實(shí)現(xiàn)

關(guān)于synchronized的講解具體請看文章:Java:這是一份全面 & 詳細(xì)的 Synchronized關(guān)鍵字 學(xué)習(xí)指南

至此,關(guān)于Java中的volatile關(guān)鍵字講解完畢。

5. 總結(jié)

本文主要講解了Java中volatile關(guān)鍵字,其作用為 保證 “共享變量 的可見性 & 有序性,具體總結(jié)如下:

到此這篇關(guān)于Java那些鮮為人知的關(guān)鍵字volatile的文章就介紹到這了,更多相關(guān)Java關(guān)鍵字volatile內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

漳州市| 郁南县| 平罗县| 万州区| 永年县| 通州区| 晋江市| 双城市| 青浦区| 张家口市| 泰和县| 仙游县| 通辽市| 个旧市| 赣州市| 哈尔滨市| 定远县| 元谋县| 安庆市| 华池县| 神池县| 株洲县| 神木县| 白城市| 上犹县| 万州区| 兴文县| 延安市| 庆安县| 乌兰察布市| 洛扎县| 攀枝花市| 萨迦县| 吴川市| 吉安县| 太仓市| 磴口县| 万全县| 江华| 昭平县| 丹江口市|