java 语言规范对volatile 关键字的定义如下

比较重要的一句话是:a file may be declared volatile, in which case the java
memory model ensures that all threads see a consistent value for the variable.
理解起来就是,对声明为 volatile 的属性,jmm能确保所有线程对这个属性看到的值是一致的(也就是说 volatile 能提供可见性)。然后我们就可以利用这个可见性大做文章,比如实现一个锁等。
上面画红圈的表明,处理器对volatile 的实现不是对系统总线进行加锁,而是对缓存加锁。
上面是处理器对缓存加锁的实现方式:
① 对缓存行加锁内容的修改会导致修改后的值马上回写内存
② 该处理器会阻止其他处理器缓存相同的内容(意思就是清空其他处理器中相同的值)
通过 ① ② 处理器的实现机制,java 中的volatile 就可以实现可见性了。
博客内容参考自 《java 并发编程的艺术》第二章 volatile 的应用