Volatile总结
1.Java内存模型
java内存模型中 所有变量都存储在主内存(虚拟机内存)《主要指共享变量》,每个线程有着自己独有的工作内存,工作内存中保存了该线程使用的变量,这些变量来自主内存中变量的副本拷贝。线程对变量的所有操作都必须在工作内存中进行,不能直接读写主存中的变量,不同线程之间的工作内存时相互独立的,不可以访问其他线程的工作内存。
在线程工作时,把需要的变量从主内存中拷贝到自己的工作内存
当一个线程要使用一个共享变量时,并不会直接使用,而是使用它的一个副本,然后交互副本值 ,
当出现JMM的缓存不一致时可以总线加锁 也可以使用 MESI缓存一致性协议
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fAVphV96-1616324208923)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210311155347951.png)]
java 中volatitle 就相当于使用了MESI缓存一致性
下面代码展示 volatile 的