volatile變數特性

2021-07-10 15:40:36 字數 506 閱讀 4098

1,可見性。對乙個volatile變數的讀,總是能看到(任意執行緒)對這個volatile變數最後的寫入。

2,原子性。對任意單個volatile變數的讀/寫具有原子性,但類似於volatile++這種復合操作不具有原子性。

當寫入乙個volatile變數時,jmm會把執行緒對應的本地記憶體中的共享變數重新整理到主記憶體。

當讀乙個volatile變數時,jmm會把該執行緒對應的本地記憶體置為無效。執行緒接下來會從主記憶體中讀取共享變數。

volatile寫和volatile讀的記憶體語義總結:

1,執行緒a寫乙個volatile變數,實質上是執行緒a想接下來將要讀這個volatile變數的某個執行緒發出了(其對共享變數所做的修改的)訊息。

2,執行緒b讀乙個volatile變數,實質上是把執行緒b接受了之前某個執行緒發出的(在寫這個volatile變數之前對共享變數所做修改的)訊息。

3,執行緒a寫乙個volatile變數,隨後執行緒b讀這個volatile變數,這個過程實質上是執行緒a通過主記憶體向執行緒b傳送訊息。

volatile幾個特性

特性1 防止該宣告變數上下文指令重排。1 2 volatile 3 4 其中12順序可變,34順序可變 但是不能跨越volatile進行排序。特性2 強制將修改值立即寫入主存,寫入時對已存在cpu的快取行做無效處理。當運用該快取是發現無效,則重新讀取主存。特性3 不具備原子性,執行緒1對變數進行讀取...

volatile型別變數

最近在 裡發現了乙個叫volatile型別的變數,竟然從來沒見過,因此特搜尋一番,以增加點見識。volatile 的作用 作為指令關鍵字 確保本條指令不會因編譯器 的優化而省略,且要求每次直接讀值.簡單地說就是防止編譯器對 進行優化.比如如下程式 xbyte 2 0x55 xbyte 2 0x56 ...

volatile特性及記憶體語義

1.volatile變數自身具有下列特性 可見性 對乙個volatile變數的讀,總是能看到 任意執行緒 對這個volatile變數最後的寫入。原子性 對任意單個volatile變數的讀 寫具有原子性,但類似於volatile 這種復合操作不具有原子性。從記憶體語義的角度來說,volatile的寫 ...