成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

并發(fā)編程:volatile關(guān)鍵字,你學(xué)會(huì)了嗎?

開(kāi)發(fā) 前端
在JSR -133之前的舊內(nèi)存模型中,一個(gè)64位long/ double型變量的讀/ 寫操作可以被拆分為兩個(gè)32位 的讀/寫操作來(lái)執(zhí)行。從JSR -133內(nèi)存模型開(kāi)始 (即從JDK5開(kāi)始),僅僅只允許把一個(gè)64位long/ double 型變量的寫操作拆分為兩個(gè)32位的寫操作來(lái)執(zhí)行,任意的讀操作在JSR -133中都必須具有原子性。

一、64位寫入的原子性(Half Write)

如,對(duì)于一個(gè)long型變量的賦值和取值操作而言,在多線程場(chǎng)景下,線程A調(diào)用set(100),線程B調(diào) 用get(),在某些場(chǎng)景下,返回值可能不是100。

因?yàn)镴VM的規(guī)范并沒(méi)有要求64位的long或者double的寫入是原子的。在32位的機(jī)器上,一個(gè)64位變 量的寫入可能被拆分成兩個(gè)32位的寫操作來(lái)執(zhí)行。這樣一來(lái),讀取的線程就可能讀到“一半的值”。解決 辦法也很簡(jiǎn)單,在long前面加上volatile關(guān)鍵字。

二、重排序:DCL問(wèn)題

單例模式的線程安全的寫法不止一種,常用寫法為DCL(Double Checking Locking),如下所示:

上述的 instance = new Singleton(); 代碼有問(wèn)題:其底層會(huì)分為三個(gè)操作:

1. 分配一塊內(nèi)存。

2. 在內(nèi)存上初始化成員變量。

3. 把instance引用指向內(nèi)存。

在這三個(gè)操作中,操作2和操作3可能重排序,即先把instance指向內(nèi)存,再初始化成員變量,因?yàn)?二者并沒(méi)有先后的依賴關(guān)系。此時(shí),另外一個(gè)線程可能拿到一個(gè)未完全初始化的對(duì)象。這時(shí),直接訪問(wèn) 里面的成員變量,就可能出錯(cuò)。這就是典型的“構(gòu)造方法溢出”問(wèn)題。 解決辦法也很簡(jiǎn)單,就是為instance變量加上volatile修飾。

volatile的三重功效:64位寫入的原子性、內(nèi)存可見(jiàn)性和禁止重排序。

三、volatile實(shí)現(xiàn)原理

由于不同的CPU架構(gòu)的緩存體系不一樣,重排序的策略不一樣,所提供的內(nèi)存屏障指令也就有差 異。 這里只探討為了實(shí)現(xiàn)volatile關(guān)鍵字的語(yǔ)義的一種參考做法:

1. 在volatile寫操作的前面插入一個(gè)StoreStore屏障。保證volatile寫操作不會(huì)和之前的寫操作重 排序。

2. 在volatile寫操作的后面插入一個(gè)StoreLoad屏障。保證volatile寫操作不會(huì)和之后的讀操作重 排序。

3. 在volatile讀操作的后面插入一個(gè)LoadLoad屏障+LoadStore屏障。保證volatile讀操作不會(huì)和 之后的讀操作、寫操作重排序。

具體到x86平臺(tái)上,其實(shí)不會(huì)有LoadLoad、LoadStore和StoreStore重排序,只有StoreLoad一種 重排序(內(nèi)存屏障),也就是只需要在volatile寫操作后面加上StoreLoad屏障。

四、JSR-133對(duì)volatile語(yǔ)義的增強(qiáng)

在JSR -133之前的舊內(nèi)存模型中,一個(gè)64位long/ double型變量的讀/ 寫操作可以被拆分為兩個(gè)32位 的讀/寫操作來(lái)執(zhí)行。從JSR -133內(nèi)存模型開(kāi)始 (即從JDK5開(kāi)始),僅僅只允許把一個(gè)64位long/ double 型變量的寫操作拆分為兩個(gè)32位的寫操作來(lái)執(zhí)行,任意的讀操作在JSR -133中都必須具有原子性(即 任 意讀操作必須要在單個(gè)讀事務(wù)中執(zhí)行)。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-03-09 07:38:58

static關(guān)鍵字狀態(tài)

2025-06-13 08:00:00

Java并發(fā)編程volatile

2023-01-29 08:08:34

并發(fā)庫(kù)conc通用庫(kù)

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-11-08 08:56:01

2016-09-19 21:53:30

Java并發(fā)編程解析volatile

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2024-01-02 12:05:26

Java并發(fā)編程

2024-03-01 08:13:45

Shell編程解釋器

2023-10-10 11:04:11

Rust難點(diǎn)內(nèi)存

2024-05-06 00:00:00

InnoDBView隔離

2024-07-31 08:39:45

Git命令暫存區(qū)

2023-01-30 09:01:54

圖表指南圖形化

2022-07-08 09:27:48

CSSIFC模型

2023-12-12 08:02:10

2024-08-06 09:47:57

2023-04-07 07:42:01

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 青草久久免费视频 | 婷婷福利 | 日韩三| 中文字字幕在线中文乱码范文 | 日日日视频 | 天天干夜夜操 | 免费一看一级毛片 | 国产精品99免费视频 | 永久免费av | 日韩欧美亚洲 | 亚洲电影免费 | 精品国产欧美一区二区 | 国产日韩视频在线 | 久久久久国产一区二区三区 | 91久久久久久久久久久 | 午夜www | 毛片入口 | 国产玖玖 | 波霸ol一区二区 | 五月婷婷激情网 | 一级a性色生活片久久毛片波多野 | av天天干| 午夜小视频在线观看 | 中文字幕在线三区 | 国产剧情久久 | 精品视频一区二区三区 | 中文字幕亚洲一区二区三区 | 91成人精品| 精品乱码一区二区 | 欧洲高清转码区一二区 | 国产精品不卡一区 | 国产一区二区三区不卡av | 亚洲精品一 | 久久久久久免费毛片精品 | 亚洲成人午夜电影 | 91精品国产高清久久久久久久久 | 日韩精品av一区二区三区 | 日韩在线视频播放 | 韩日有码 | 激情国产视频 | 玖草资源 |