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