为了支持 JMM,Java 定义了 8 种原子操作(Action),用来控制主存与工作内存之间的交互:
- read 读取:作用于主内存,将共享变量从主内存传动到线程的工作内存中,供后面的 load 动作使用。
- load 载入:作用于工作内存,把 read 读取的值放到工作内存中的副本变量中。
- store 存储:作用于工作内存,把工作内存中的变量传送到主内存中,为随后的 write 操作使用。
- write 写入:作用于主内存,把 store 传送值写到主内存的变量中。
- use 使用:作用于工作内存,把工作内存的值传递给执行引擎,当虚拟机遇到一个需要使用这个变量的指令,就会执行这个动作。
- assign 赋值:作用于工作内存,把执行引擎获取到的值赋值给工作内存中的变量,当虚拟机栈遇到给变量赋值的指令,执行该操作。比如 int i = 1。
- lock(锁定) 作用于主内存,把变量标记为线程独占状态。
- unlock(解锁) 作用于主内存,它将释放独占状态。