volatile關鍵字與記憶體的可見性

2021-08-16 09:31:58 字數 661 閱讀 1085

1. volatile 關鍵字 主存可見性

volatile 關鍵字會讓主存的資料可見,在多執行緒中 修飾共享資料,保證多個執行緒訪問資料的時候,都保證每個執行緒都可以看見這個主存中的最新資料

volatile 相比 synchronized 是一種輕量級的同步策略

1.volatile 不具備 「互斥性」

2.volatile 不能保證變數的 「原子性」

volatile 加上之後,所有操作會在主存之中進行

2.原子變數

i++ 的原子性問題 => 記憶體可見性

讀 -> 改 ->寫

jdk1.5之後有 atomic 類, 原子性

volatile 保證記憶體可見性, cas演算法 保證了資料的原子性

cas 硬體對於併發操作共享資料的支援

記憶體值 a 預估值 v 更新值 b

只有 a == v 才把 a=b 否則不操作

3.模擬cas演算法

關鍵字 volatile關鍵字的作用

1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...

JVM記憶體模型及Volatile關鍵字

記憶體模型 1.每乙個執行緒有乙個工作記憶體 2.工作記憶體存放主存中變數的值的拷貝 1,當資料從主存複製到工作儲存時,必須出現兩個操作 第一,由主記憶體執行read操作,第二,由工作記憶體執行的響應的load操作,當資料從工作記憶體拷貝到主記憶體時,也出現兩個操作 第一由工作記憶體執行的儲存sto...

volatile關鍵字及jmm記憶體模型

計算機指令都是在cpu中執行的,在指令執行過程中必定伴隨著大量的讀取和寫入操作,那個程式執行時的資料時存放在記憶體的,隨著cpu的更新換代,記憶體的速度已經遠遠的跟不上cpu的速度,這使得cpu的讀取寫入效率非常低。為了解決這一問題,在cpu與記憶體間都以cpu快取記憶體作為中轉。也就是在cpu在執...