java内存模型与线程(1)

一、处理器、高速缓存、主内存之前的交互图

《java内存模型与线程(1)》

 

二、Java内存模型

《java内存模型与线程(1)》

俩张图之间的关系很清晰

一个处理器对应一个线程

一个高速缓存对应一个工作内存

问题的关键点就在于:java线程之间与工作内存打交道而不是主内存,工作内存之间没有直接的关联,都是要与主内存交互,并发关键点就在此。

 

三、内存间8种交互操作

《java内存模型与线程(1)》

1.  8种交互操作的含义

lock:作用于主内存的变量,把一个变量标识为一条线程独占的状态

unlock:作用于主内存的变量,把一个处于锁定的变量释放出来

read:作用于主内存的变量,把一个变量的值从主内存传输到工作内存

load:把read操作从主内存中得到的变量值放入工作内存的变量副本中

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

assign:作用于工作内存中的变量,从执行引擎收到的值给工作内存中的变量

store:作用于工作内存的变量,把工作内存中的变量传送到主内存

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

 

2.  8种基本操作满足的规则

1)read 和 load 成对出现, store  和  write 成对出现

2)不允许丢弃assign,即工作内存中改变后必须变化同步回主内存

3)没有任何assign操作,不允许把数据从线程的工作内存同步到主内存

4)新的变量诞生只能从主内存中诞生,不能在工作内存中诞生,因为工作内存中只是副本

5)只允许一个线程对其进行lock操作,同一个线程可以多次lock,但是需要多次unlock解锁

6)对一个变量lock操作,会清空工作内存中的此变量的值,使用时需要重新load或assign操作初始化变量的值

7)unlock操作一定在lock操作之后

8)对变量unlock操作之前,必须先把变量同步回主内存中(执行store、write操作)

 

 

 

 

 

 

 

    原文作者:java内存模型
    原文地址: https://blog.csdn.net/qq_42214817/article/details/82977309
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞