Volatile关键字对于double、long的影响

缘由

今天被问到一个问题,太久没看了,记混了,特此记录一下。

线程安全三大特性

总所众知,多线程安全主要变现为三个特性:可见性、原子性、有序性。

Volatile

而说到可见性,就不得吧提到Volatile这个关键词。
对于大部分基础数据类型,单独的读写操作都是具有原子性的,Volatile保证了其可见性。
但是double、long这两种类型的读写则有所不同。
double、long本身有64位宽,对于Java虚拟机,目前是将32位的读写作为原子操作,所以double和long的读写需要分为两次,每次读写32位。
如果不进行数据安全相关处理,则会出现问题:

通常来说,Volatile这个关键字的作用仅保证数据的可见性,并不保证原子性,而对于double和long的读写,Volatile还额外保证了读写的原子性。

注意:Volatile对于double、long的读写原子性仅指单次读或单次写,如果一个操作同时具有读写,则不能保证整体的原子性,如i++;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值