保证有序性,可见性

与 synchronized 类似,volatile 也是通过内存屏障来保证有序性与可见性,过程如下:

读操作

image.png

写操作

image.png
经过对比synchronized,可以发现 volatile 少了两个指令 monitorenter 与 monitorexit 用来保证原子性与线程安全。

Volatile源码

bytecodeInterpreter.cpp

storeLoad()

image.png
image.png

HotSpot的内存屏障

image.png
image.png
lock指令对总线上锁,只有当前CPU能够对当前变量进行写主存的操作。