JMM内存模型(Java多线程内存模型不是Java虚拟机内存模型)

 每个线程在修改变量值的时候优先修改的是自己工作内存中的共享变量副本,经典的验证程序:

这个程序中如果要保证修改立马生效的话就需要对于变量initFlag加上volitiel的关键字(保证可见性)

 JMM原子操作

 加volitile之前的整体流程(对应于上面的那段代码),write的实际是方法结束前

 

 

 

 加了volitile就会有lock这个关键字,如果没有volitile就没有

 

 

 a=0,x=1   b=1, y=1(one先执行)  或者 a=1,x=1 b=0, y=1(other先执行),不应该出现a=1且b=1的情况,但是实际是会出现的:

 

 阿里巴巴开发者手册里关于DCL单例的描述:

 

 对象的初始化过程:

 

 

 

 

 

指令重排和内存屏障

 

 

 lock修饰的代码前后左右不能重排序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值