volatile可以保证线程可见性(高速缓存一致性)
通过在总线加LOCK#锁的方式
通过缓存一致性协议禁止指令重排
happens-before原则但是无法保证原子性
在JVM底层volatile是采用“内存屏障”来实现的。
volatile关键字时,会多出一个lock前缀指令。lock前缀指令其实就相当于一个内存屏障。内存屏障是一组处理指令,用来实现对内存操作的顺序限制。volatile的底层就是通过内存屏障来实现的。
volatile可以保证线程可见性(高速缓存一致性)
通过在总线加LOCK#锁的方式
通过缓存一致性协议
禁止指令重排
happens-before原则
但是无法保证原子性
在JVM底层volatile是采用“内存屏障”来实现的。
volatile关键字时,会多出一个lock前缀指令。lock前缀指令其实就相当于一个内存屏障。内存屏障是一组处理指令,用来实现对内存操作的顺序限制。volatile的底层就是通过内存屏障来实现的。