Java併發 volatile關鍵字 可見性

2021-09-01 06:27:05 字數 436 閱讀 7363

(1)volatile是輕量級的synchronized,它在多處理器開發中保證了共享變數的「可見性」,但無法保證「原子性」。

(2)volatile不會引起執行緒上下文的切換,在使用恰當的情況下,比synchronized的使用和執行成本更低.

volatile不需要加鎖,比synchronized更輕量級,並不會阻塞執行緒(volatile不會造成執行緒的阻塞;synchronized可能會造成執行緒的阻塞。)

(3)只能在類屬性宣告處才能使用volatile,區域性變數宣告為volatile會報錯。

(4)應避免在32位的jvm上將double、long型的屬性宣告成volatile,因為在32位jvm上訪問乙個double或long型的變數值需要進行兩步操作,若要安全地訪問它們的值,原子性(通過synchronized)也是必要的。

可以借助final建立乙個不可變且執行緒安全的類

java併發 volatile關鍵字

從記憶體語義的角度來說,volatile的寫 讀與鎖的釋放 獲取有相同的記憶體效果 volatile寫和鎖的釋放有相同的記憶體語義 volatile讀與鎖的獲取有相同的記憶體語義。當寫乙個volatile變數時,jmm會把該執行緒對應的本地記憶體中的共享變數值重新整理到主記憶體。jmm針對編譯器制定...

Java併發程式設計 JMM和volatile關鍵字

通過快取一致性協議 string s abc int i 0 i i 0 主記憶體 i 執行緒1 j i 執行緒22.被volatile關鍵字修飾變數不會指令重排序。public class novisibility private static class readthread extends t...

Java併發 volatile的實現原理

synchronized 是乙個重量級的鎖,volatile通常被比喻成輕量級的synchronized volatile是乙個變數修飾符,只能用來修飾變數。volatile寫 當寫乙個volatile變數時,jmm會把該執行緒對應的本地記憶體中的共享變數重新整理到主記憶體。volatile讀 當讀...