Volatile實現內存可見性的過程


用法   volatile string = "a";

線程寫volatile變量的過程:

  1.改變線程本地內存中volatile變量副本的值

   2.將改變后的副本的值從本地內存刷新到主內存

線程讀volatile變量的過程:

  1.從主內存中讀取volatile變量的最新值到線程的本地內存中

  2.從本地內存中讀取volatile變量的副本

volatile實現內存可見性原理:

寫操作時,通過在寫操作指令后加入一條store屏障指令,讓本地內存中變量的值能夠刷新到主內存中

讀操作時,通過在讀操作前加入一條load屏障指令,及時讀取到變量在主內存的值

內存屏障是一種cpu的指令,用於控制特定條件下的重排序和內存可見性問題,

java編譯器也會根據內存屏障的規則禁止重排序

volatile 只能保證可見性和有序性,並不能保證原子性

所以它替代不了同步代碼塊。

* AtomicInteger(原子操作)

用法:public volatile AtomicInteger count = new AtomicInteger(0);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM