首先得稍微了解一下JMM(java内存模型)的相关基础知识,java中的线程在计算机使用的是内存共享的机制,所以使用volatile关键字可以理解为:
(1)答案一:当被volatile关键字修饰的资源有变化的时候,计算机会把CPU中的缓存资源重新刷新一遍,达到变量可见性一致的效果。
(2)答案二:当前计算机基本为多核多线程,在CPU中有一个缓存一致性的协议,由于这个协议使得CPU缓存资源刷新,最终达到变量可见性一致的效果。
volatile和synchronized的区别:
(1)synchronized即保证了原子性,也保证了变量可见性;
(2)volatile只保证了变量可见性;