Java内存模型——同步八个操作

 2024-01-13 02:09:22  阅读 0

为了方便自己学习整理的

(1)锁:作用于主存中的变量,将变量标记为一个线程独占

(2)(解锁):作用于主存中的变量,释放处于锁定状态的变量,只有此时释放的变量才能被其他线程锁定

(3)读:作用于主存中的变量,将一个变量值从主存传送到线程的工作内存中,以供后续加载动作使用。

(4) 加载:作用于工作内存中的变量。 它将读操作从主存获取的变量值放入工作内存的变量副本中。

(5)use:作用于工作内存中的变量,将工作内存中的变量值传递给执行引擎

(6)(赋值):作用于工作内存中的变量。 它将从执行引擎接收到的值分配给工作内存中的变量。

(7)store(存储):作用于工作内存中的变量,将工作内存中变量的值传输到主内存中,以供后续的写操作

(8) 写入:作用于工作内存中的变量。 它将存储操作从工作内存中的变量值传输到主内存中的变量。

如果要将一个变量从主内存复制到工作内存,则需要依次执行读取和加载操作。 如果要将一个变量从工作内存同步到主内存,需要依次执行存储和写入操作。 但Java内存模型只要求上述操作必须按顺序执行,并不能保证它们必须连续执行。

对应如下流程图:

同步规则分析:

1)不允许线程无故从工作内存同步数据到主内存(没有发生操作)

2)新的变量只能在主存中诞生,未初始化(加载或)的变量不允许在工作内存中直接使用。 也就是说,在对变量进行使用和存储操作之前,必须先对其进行加载操作。

3)一个变量只允许一个线程同时对其执行锁定操作,但同一线程可以多次执行锁定操作。 多次执行锁定后,只有执行相同次数的操作才会解锁该变量。 锁并且必须成对出现。

4) 如果对某个变量进行锁定操作,则该变量在工作内存中的值将被清除。 在执行引擎可以使用这个变量之前,需要重新执行加载或操作来初始化该变量的值。

5) 如果变量没有事先被锁定操作锁定,则不允许对其进行操作; 也不允许访问被其他线程锁定的变量。

6)对变量进行操作之前,必须将变量同步到主存(进行存储和写入操作)

标签: 变量 内存 操作

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码