一文了解volatile

88 阅读1分钟

volatile是什么

volatile保证了共享变量的“可见性”,即所有线程看到这个变量的值是一致的(每次获取改变量都是修改后最新的值)。但不保证原子性。

volatile怎么保证可见性的呢?

  • 写到主内存中,从主内存中读

  • ⼀个变量被声明为volatile 时,线程在写⼊变量时不会把值缓存在寄存器或者其他地⽅,⽽是会把值刷新回主内存 当其它线程读取该共享变量 ,会从主内存重新获取最新值,⽽不是使⽤当前线程的本地内存中的值

volatile怎么保证有序性的呢?

编译器在⽣成字节码时,会在指令序列中插⼊内存屏障来禁⽌特定类型的处理器重排序。

在volatile读操作和写操作的前后都插入屏障,从而禁止重排序。