一、定义

java语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。

二、原理

汇编指令在有volatile修饰的共享变量进行写操作时候会多出带lock标志的指令。带lock指令在多核处理器会引发两件事。
将当前处理器缓存行的数据写回到系统内存。
这个写会内存的操作会使其他CPU里缓存了该内存地址的数据无效。
volatile实现依靠的是MESI(Modified,Exclusive,Shared,Invailid)控制协议。