JVM-----java内存模型和线程

每个线程都有一个工作内存,线程只可以修改自己工作内存中的数据,然后在同步回主内存,主内存由多个工作内存共享。

下面8个操作都是原子的,不可再分的:

(1)lock:作用域主内存的变量,它把一个变量标识为一条线程独占的状态。

(2)unlock:作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。

(3)read:作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存,以便随后的load操作使用。

(4)load:作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中。

(5)use:作用于工作内存的变量,它把工作内存中一个变量的值传递给执行引擎,每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作。

(6)assign:作用于工作内存的变量,它一个从执行引擎接收到值付给工作内存的变量,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。

(7)store:作用于工作内存的变量,它把工作内存中一个变量的值传送到主内存中,以便随后write使用。

(8)write:作用于主内存的变量,它把store操作从工作内存中得到的变量值放入主内存的变量中。


注:如果要把一个变量从主内存复制到工作内存中,那就要顺序的执行read和load操作;如果要把变量从工作内存同步回主内存。就要顺序的执行store和write操作。注意,java内存模型只要求上述两个操作必须按顺序执行,而没有保证是连续执行。

猜你喜欢

转载自blog.csdn.net/g1607058603/article/details/80583953