JMM
Java内存模型(JMM)定义的是一种抽象的概念,定义屏蔽java程序对不同的操作系统的内存访问差异。
在多线程中为了保证共享变量的可见性:通过Lock(汇编指令)和总线锁/MESI-缓存一致性协议控制。
下图是工作内存和共享主存结构:
Volatile汇编lock指令:
- 将当前处理器缓存行数据立刻写入主内存中。
- 写的操作会触发总线嗅探机制,同步更新主内存的值。
JMM八大同步规范
(1)lock(锁定):作用于 主内存的变量,把一个变量标记为一条线程独占状态
(2)unlock(解锁):作用于 主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定
(3)read(读取):作用于 主内存的变量,把一个变量值从主内存传输到线程的 工作内存中,以便随后的load动作使用
(4)load(载入):作用于 工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中
(5)use(使用):作用于 工作内存的变量,把工作内存中的一个变量值传递给执行引擎
(6)assign(赋值):作用于 工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存的变量
(7)store(存储):作用于 工作内存的变量,把工作内存中的一个变量的值传送到 主内存中,以便随后的write的操作
(8)write(写入):作用于 工作内存的变量,它把store操作从工作内存中的一个变量的值传送到 主内存的变量中