volatile允许线程访问这个共享变量,一个字段被声明为volatile,则java内存模型确保所有线程看到这个变量的值是一致的。
有volatile变量修饰的共享变量进行写操作的时候会触发以下两件事:
1.将当前缓存行的数据写回到系统内存;
2.这个写回内存的操作,使其他处理器缓存的该数据的内存地址失效。
如果对声明了volatile的变量进行写操作,JVM会将这个变量所在缓存行的数据写回到系统内存,之后其他处理器通过嗅探在缓存总线上传播的数据看自己缓存的数据是否过期,当处理器发现缓存行对应的数据被修改,就会将这个数据所在的缓存行设置为无效状态,当处理器对这个缓存行重新进行操作时,会重新从系统内存读取该数据到缓存行。