JMM 内存间交互操作

Java内存模型规定了所有的变量都存储在主存中,每个线程都有自己的工作内存,工作内存中保存了该线程要用到的主存中变量的副本,线程对变量的操作都是在工作内存中完成,不能直接操作主存,线程之间也无法直接访问其他线程的工作内存,线程间变量值的传递需要通过主存来完成,这就涉及到了主存与工作内存间的交互操作。

Java内存模型中定义了8种操作来完成,虚拟机保证了每种操作都是原子的。

  • lock(锁定):作用于主存的变量,把一个变量标识为一条线程独占状态。
  • unlock(解锁):作用于主存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。
  • read(读取):作用于主存变量,把一个变量的值从主存传输到工作内存。
  • load(载入):作用于工作内存变量,把 read 来的值放入工作内存的变量副本中。
  • use(使用):作用于工作内存变量,把工作内存中一个变量的值传递给执行引擎,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。
  • store(存储):作用于工作内存变量,把工作内存中一个变量的值传送到主存。
  • write(写入):作用于主存变量,把 store 操作从工作内存中得到的变量的值放入主存的变量中。

如果要把一个变量从主存复制到工作内存:顺序执行 readload 操作。

如果要把变量从工作内存同步会主存:顺序执行 storewrite 操作。

注意:JMM 只是规定了必须顺序执行,而没有保证是连续执行,其间可以插入其他指令。

猜你喜欢

转载自blog.csdn.net/weixin_33962923/article/details/87088448
JMM
今日推荐