处理器lock前缀指令
内存屏障 + 缓存一致性协议(MESI) + 总线嗅探技术 + … = 内存可见
操作系统mutex锁
操作系统实现线程互斥的一种手段(或者被称为系统接口),而lock前缀指令是保证mutex互斥锁实现原子性操作的更底层的机制。
JMM内存模型
JVM内存模型分为主内存和本地内存,每个线程都有对应的本地内存,存储的是主内存的变量副本。
本地内存只是个逻辑概念,其实质就是CPU的高速缓冲区和寄存器存等;各线程本地内存的数据不一致其实主要是CPU高速缓冲区的数据不一致导致的。
JMM线程模型其实质就是JVM对不同的CPU架构进行了抽象封装,掩盖了底层的不同。
JAVA内置保证内存可见
-
volatile – lock前缀指令
— 保证可见性、禁止指令重排 -
synchronized – mutex锁
— 保证可见性、互斥性、原子性 (不包含指令重排)