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);

猜你喜欢

转载自www.cnblogs.com/x-x-f/p/12697759.html
今日推荐