volatile问题汇总

volatile作用
  1. 可见性:所有线程都能看到共享内存的最新状态,不保证操作的原子性。
  2. 防止指令重排。
volatile原理
  1. 从Java内存模型理解,volatile要求d读操作(read、load、use),写(assign、store、write)动作必须连续出现,从而保证读操作会先刷新工作内存,写操作会立即同步到主内存。
  2. 通过内存屏障控制CPU的store buffer和invalid queue的行为来防止指令重排。
Store buffer 和Invalid Queue
  • CPU修改Cache时需要通知其他CPU失效缓存,并得到确认之后才能修改Cache,所以引入StoreBuffer,保存还未搜到确认的写操作。
  • 同样的,为了提高对失效缓存信号的响应速度,引入Invalid Queue保存已经收到并确认但是没有处理的缓存失效信号。
volatile和synchronized的区别
  1. volatile无锁,不能保证原子性,synchronized能保证原子性。
  2. volatile只能修饰变量,synchronized可以修饰变量,方法和代码块。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值