早期:加锁
在线程1还没有给解锁之前,别的线程不能用,其实算是串行了,当然没有缓存
JMM 数据原子操作
JMM缓存不一致问题
现在:MESI缓存一致性协议
cpu和主内存交互:经过总线
线程各自一起读取自己需要的,并行运行
CPU嗅探机制:关注线程自己感兴趣的变量,如果发现有变量在总线变了,就将自己的变量置位失效,重新从主内存读取
加了volatile:只要赋值操作,就lock,立即回写主内存(store–>write)
volatile其实也有lock,但是只是回写主内存的时候lock了,大大降低了锁的密度
需要lock:防止数据误读,还没写进去呢,就被读了
并发编程三大特性
可见性,原子性,有序性
Volatile可以保证可见性,有序性,但是不能保证原子性
有序性:volatile可以不让虚拟机进行指令重排
原子性需要synchronized锁 (我也总结过啦!Synchronized锁)