原子性/可见性/代码重排序

原子性
满足变量 = 常量的形式(不是每一条java语句都是原子的)
int a = 100 原子
long b = 100L 不保证是原子的
double c = 100.0 不保证是原子的
Object o = new Object(); 引用的赋值是原子的

volatile long b = 100L 原子
volatile double c = 100.0 原子
可见性
JMM 共享变量在多线程之间不能及时看到改变,这个就是可见性的问题
代码重排序
1.为什么要进行重排序?优化执行效率,
2.哪些东西会对代码进行重排序?
编译期间 编译器 javac
运行期间 JVM(JIT Just In Time)
运行期间 CPU
3.单线程的情况下,重排序一定没问题
4.多线程情况下,没有这个保证

happen-before
JMM

1.模型分为主内存和工作内存
2.主内存只有一份(虚拟真实的内存)
3.工作内存,每个线程各有一个(虚拟真实的CPU缓存)
4.线程是不可以直接操作主内存中的数据的
1)先Load,把数据从主内存中加载到工作内存中
2)修改工作内存中的数据
3)在合适的时候,把数据保存会主内存,Save
5.这个和java内存区域划分是不同视角上的事情,无直接关系

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值