浅尝java内存模型(JMM)
本文参考《深入理解虚拟机》一书 一.JMM中的主内存和工作内存 主内存:主要是存储线程要读取的数据,如实例字段、静态字段和数组元素,局部变量和形参不存储在主存。 工作内存:每一个线程都有自己的工作内存,工作内存存储从主存中copy的一份副本,线程只能操作工作内存中的数据,不能直接操作主存中的数据。不同线程之间也无法访问其它线程的工作内存变量线程间变量值传递需要通过主存来进。 内存间进行交互操作: 由上面的交互关系可知,关于主内存与工作内存之间的具体交互协议,即一个变量如何从主内存拷贝到工作内存、如何从工作内存同步到主内存之间的实现细节,Java内存模型定义了以下八种操作来完成: lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占状态。 unlock(解锁):作用于主内存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。 read(读取):作用于主内存变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用 load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中。 use(使用):作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎,每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作。 assign(赋值):作用于工作内存的变量