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

并發編程:volatile關鍵字,你學會了嗎?

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

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

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

因為JVM的規范并沒有要求64位的long或者double的寫入是原子的。在32位的機器上,一個64位變 量的寫入可能被拆分成兩個32位的寫操作來執行。這樣一來,讀取的線程就可能讀到“一半的值”。解決 辦法也很簡單,在long前面加上volatile關鍵字。

二、重排序:DCL問題

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

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

1. 分配一塊內存。

2. 在內存上初始化成員變量。

3. 把instance引用指向內存。

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

volatile的三重功效:64位寫入的原子性、內存可見性和禁止重排序。

三、volatile實現原理

由于不同的CPU架構的緩存體系不一樣,重排序的策略不一樣,所提供的內存屏障指令也就有差 異。 這里只探討為了實現volatile關鍵字的語義的一種參考做法:

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

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

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

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

四、JSR-133對volatile語義的增強

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

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-03-09 07:38:58

static關鍵字狀態

2025-06-13 08:00:00

Java并發編程volatile

2023-01-29 08:08:34

并發庫conc通用庫

2016-09-19 21:53:30

Java并發編程解析volatile

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2021-03-10 15:59:39

JavaSynchronize并發編程

2024-11-08 08:56:01

2022-06-29 08:05:25

Volatile關鍵字類型

2011-06-14 13:26:27

volatile

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2023-10-10 11:04:11

Rust難點內存

2024-05-06 00:00:00

InnoDBView隔離

2023-01-30 09:01:54

圖表指南圖形化

2024-07-31 08:39:45

Git命令暫存區

2023-12-12 08:02:10

2022-07-08 09:27:48

CSSIFC模型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91在线精品视频 | 盗摄精品av一区二区三区 | 亚洲一区二区久久久 | 国产精品日产欧美久久久久 | 国产精品一区在线观看 | 亚洲成人免费观看 | 97久久久久久 | 激情欧美日韩一区二区 | 最新日韩av | 国产1区 | 免费激情 | 一二区视频| 色综合99| 欧美三级免费观看 | 国产成人精品综合 | 亚洲 中文 欧美 日韩 在线观看 | 黄色一级免费看 | 日韩在线| 中文字幕免费在线 | 91xh98hx 在线 国产 | 一区二区三区日韩 | 亚洲日本免费 | 夜夜草| 在线观看日韩精品视频 | 蜜桃视频成人 | 色偷偷888欧美精品久久久 | 九九热在线精品视频 | 亚洲免费人成在线视频观看 | 99精品国自产在线 | 在线国产精品一区 | 午夜精品一区二区三区免费视频 | 成人日韩精品 | 久久伊人久久 | 污视频免费在线观看 | 国产美女在线免费观看 | 国产精品一区二区不卡 | 欧美久久一区二区 | 91精品国产色综合久久 | 国内自拍偷拍一区 | 久久一区视频 | 国产一区二区三区在线视频 |