学习记录463@Java中volatile内存语义和锁的内存语义的共同点

volatile具有如下内存语义

1、对其修饰的变量进行写操作后,会将其私有内存中的修改的变量值刷新到主存;
2、对其修饰的变量进行读操作前,会将其私有内存无效化,需要从主存中读取最新的变量值,这就在并发环境中保证的了此变量的可见性;
注意以上两条语义的实现,原因是内存屏障的保护作用。

加锁的情况下,对于变量的操作其内存语义如下

1、对变量的操作后释放锁,释放锁后会将其私有内存中的修改的变量值刷新到主存;
2、获取锁,会将其私有内存无效化,需要从主存中读取最新的变量值,这同样在并发环境中保证的了此变量的可见性;

为什么加锁和volatile具有在可见性上的相同的内存语义

因为锁的底层和volatile有关。
对于公平锁,其中释放锁的时候,涉及到了volatile变量的写,获取锁的时候,涉及到了votatile变量的读。
对于非公平锁,其中释放锁的时候,涉及到了volatile变量的写,获取锁的时候,涉及到了CAS,而CAS的实现底层又涉及到了机器级的lock,这个lock具有volatile写和读的内存语义。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值