线程篇-volatile

volatile:可以解决可见性与有序性问题
CPU层面的内存屏障:
1.Store Barrier:强制所有在store屏障指令之前的stroe指令,都在该stroe指
令执行之前都执行完毕,并把store缓存的数据全部写回到内存
2.Load Barrier:强制所有在Load屏障指令之后的load指令,都在该Load屏
障指令之后
被执行,并且一直等到load缓存区被cpu读取完毕才执行之后的load指令
3.Full Barrier:集成了Stroe Barrier和Load Barrier屏障的功能

JVM根据这些屏障在JVM层面做了相应的处理禁用重排序与禁用缓存来解决可见性
与有序性的问题
JMM层面对应了四种屏障:
1.loadload: loadA loadload loadB :loadA必须在LoadB之前被读取到cpu
2.stroestroe
3.loadstroe
4.stroeload
1.加了volatile,从本质上来看是通过内存屏障来禁用重排序而解决有序性问题,
以及通过禁用高速缓存来解决可见性问题,其中禁用高速缓存是通过lock指令

在这里插入图片描述

其中的写屏障对应着Stroe,禁用了重排序,,并且将值立刻写回了内存,读屏障保证在
执行assert value==10,缓存区的值能够被读取到cpu,从而使这个断言成立
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值