将并行的线程改为串行(通过加锁),这样其他cpu没法去读或写这个数据,直到这个cpu使用完数据释放锁之后其它cpu才能读取该数据
其中某个cpu修改了缓存里的数据,该数据会马上同步回主内存,其他cpu通过总线嗅探机制可以感知到数据的变化从而将自己缓存里的数据失效
通过总线实现,cpu总线嗅探(监听机制),然后使工作内存值失效,重新读取
1.volatile底层采用C语言编写,所以通过查看汇编代码分析底层是西安主要通过汇编lock前缀指令,它会锁定这块内存区域的缓存(缓存行锁定)并回写到主内存
2.整体过程,线程2修改内存缓存值,volatile进行加锁(在store之前加锁,write写成功后才会unlock),然后同步回主内存,经过总线激发MESI缓存一致性协议,让其他线程工作内存的值工作副本失效,重新读取,做到了线程数据同步
3.volatile加锁相比总线加锁性能高很多,总线加锁从read到write整个过程伴随着锁
4.解决的是多线程访问共享变量的可见性问题的,结合Java内存模型图,和汇编语言的lock前置指令结合
5.Volatile可见性丶原子性和有序性
1.并发编程三大特性:可见性,原子性,有序性2.volatile保证可见性和有序性,但不保证原子性,保证原子性需要借助synchronized这样的锁机制