volatile内存语意

volatile的写锁对应的是锁的锁定

volatile的读锁对应的是锁的释放

Q:为什么volatile的读写与普通的读写要通过内存屏障来保障不能重排序捏?

1:v写之前的操作不能与v写进行重排序
2:v读之后的操作不能与v读进行重排序
3:v写不能与v读进行重排序

volatile的读写锁在内存语义上看就是线程与线程之间的通信。

针对v写的内存语意,v写会将缓存中的数据全部刷到主内存当中去
根据v写的内存语意,我们可以了解到,如果前面变量的操作重排序到v写的后面,那么就极有可能造成主内存中的数据与缓存中的数据无法同步,那么此时有操作在去读取数据时,从主内存中拉取的数据可能就不是最新的数据。

一个变量被volatile修饰后,JVM会为我们做两件事:

1.在每个volatile写操作前插入StoreStore屏障,在写操作后插入StoreLoad屏障。

2.在每个volatile读操作前插入LoadLoad屏障,在读操作后插入LoadStore屏障。

volatile优点是:不需要加锁也能保持线程的可见性,减少上下文之间的切换次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值