java 原子性类型_Java 原子性,可见性

本文探讨了Java内存模型中的原子性问题,指出int类型的赋值是原子的,而long和double可能不是。由于32位系统处理long需要两次操作,导致它们的读写可能不具备原子性。volatile保证了变量的可见性,但不保证原子性。内存屏障则用于确保内存操作的顺序。博客还提到了volatile与synchronized在性能上的差异,并提及在不同环境下long和double的原子性行为。
摘要由CSDN通过智能技术生成

原子性:最小操作执行单元,不可中断分割。int类型是原子的,long不一定是,因为long的赋值是两次赋值才能完成,

对于32位操作系统来说,单次操作能处理的最长长度为32bit,而long类型8字节64bit,所以对long的读写都要两条指令才能完成(即每次读写64bit中的32bit)。如果JVM要保证long和double读写的原子性,势必要做额外的处理。

JVM规范中,没有规定一定要原子性,32位的HotSpot没有把long和double的读写实现为原子操作。

对于64big的环境来说,单次操作可以操作64bit的数据,即可以以一次性读写long或double的整个64bit,所以是原子的。

可见性:是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。volatile变量修饰保证了可见性,但不能保证原子性。  某些需要同步的场景,若可用volatile,它比synchronized 快,因为不需要做线程上下文切换。

内存屏障

内存屏障,又称内存栅栏,是一组处理器指令,用于实现对内存操作的顺序限制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值