jvm-内存模型和volatile的可见性和有序性理解

总线:理解“CPU”与“主内存”交互数据的方式是通实际存在电线传输的,MESI协议是“cpu”底层在总线级别的一种实现;实现过程(总线开启MESI):CPU就会对总线的数据开启监听(嗅探)变量值,当某个线程修改了变量值副本值,刷新到主内存时就会触发嗅探,(目的实现缓存一致性,线程可见性)主内存原值失效重新赋值,其他cpu嗅探到时,先失效掉自己value,然后重新到主内存read-get值

volatile汇编源码:也就在所在行加了“lock”枷锁,直接写入主内存,同时会经过总线(ESMI)会激起嗅探机制

ps: Q1:不加lock ? A:不加会存在多线程一致性问题

    2: Q: lock的位置最优? A:lock会让并行变串行,所以不能穿插业务,影响效率,所以必须枷锁而且还要效率高,所以只在进行赋值(内存地址切换指针)时lock,消耗最少效率安全都最高;

 

volatile 它保证了多线程的可见性和有序性,但是无法保证多线程的原子性,多线程同时运行时,1线程修改变量时就会出现2线程原值”失效“进而重新read主内存,导致数据丢失;不过可以利用synchronized锁机制解决,详见如图

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值