JMM(5)

目录

一、什么是JMM

二、JMM的作用

三、线程,工作内存,主内存的关系


一、什么是JMM

       java内存模型( Java Memory Model),屏蔽硬件和操作系统的内存访问差异,实现java程序在各种平台下都能达到内存访问一致。

二、JMM的作用

        JMM实现缓存一致性协议,定义了程序中变量的访问规则。这里的变量指的是实例字段,静态字段,构成数组对象的元素,不包括局部变量和方法参数,因为这些是线程私有的。

三、线程,工作内存,主内存的关系

       

        a、变量都存储在主内存中。

        b、每条线程有自己的工作内存,工作内存中保存了该线程使用的变量的主内存副本。

        c、线程对变量的操作(读取,赋值等)都在工作内存中进行,不能直接读取主内存中的变量。

        d、线程之间无法直接访问对方工作内存中的变量,且线程间变量的传递必须通过主内存来完成。

四、主内存与工作内存交互(8种操作)

        指的是变量怎样从主内存拷贝到工作内存,又从工作内存同步到主内存的过程。

        a、lock(锁定):作用于主内存变量,将其标识为一条线程独有的状态。

        b、unlock(解锁):作用于主内存变量,将其从锁定状态释放出来,释放后才能被其他线程锁定。

        c、read(读取):作用于主内存变量,将主内存中的变量读取到工作内存。

        d、load(载入):作用于工作内存变量,把读取到的主内存变量加载到工作内存的变量副本中。

        e、use(使用):作用于工作内存变量,把工作内存的变量的值传递给执行引擎去使用。

        f、assign(赋值):作用于工作内存变量,把执行引擎返回的结果赋给工作内存的变量。

        g、store(存储):作用于工作内存变量,把工作内存中变量的值传递给主内存。

        h、write(写入):作用于主内存变量,把从工作内存传递的值赋给主内存的变量。

在执行上述8种操作的时候必须满足以下条件:

        a、不允许read和load,store和write操作之一单独出现。即不允许一个变量从主内存读取了,但工作内存不接受;工作内存发起了回写但主内存不接受。

        b、不允许线程丢弃最近的assign操作,即变量在工作内存中发生变化后,必须把该变化同步回主内存。

        c、不允许线程把没发生过任何assign操作的变量同步回主内存。

        e、新的变量只能从主内存中诞生,不允许工作内存使用没经过load,assign操作的变量。

        f、一个变量同一时刻只能被一条线程进行lock操作,lock操作可以执行多次,想要解锁必须执行同等数量的unlock。

        g、对一个变量执行lock操作,将会清空工作内存该变量的值;执行引擎使用该变量前必须重新执行load或者assign操作以初始化该变量的值。

        h、一个变量没有被lock操作锁定,就不允许执行unlock操作,也不允许unlock一个被其他线程锁定的变量。

        i、对一个变量执行unlock操作之前,必须把该变量同步回主内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科特er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值