java中 long和double类型的赋值是原子性吗?

版权声明:Hi,屏幕前的猿你好,此篇博文中的内容如帮到你,请一定不能吝啬帮我点赞,评论,关注,帮我来个全套大保健呢!我愿与你一同成长变强,得到技术加持,祈愿! https://blog.csdn.net/ted_cs/article/details/82963371

以上问题,在百度中搜答案的时候,竟发现大家语调一致地认为: long和double类型的赋值不是原子性的。

but,其实不是这样的。

那你有想过吗,为什么同样是基本数据类型,byte ,int short它们的赋值就是原子性的呢?

讲到根本,原来啊,是和你的操作系统是有关的,32位操作系统每次读取最长的是4个字节,32bit,所以,在32位操作系统上,超过32bit的数据是需要分俩次读取的。

那么,在读取long,double类型数据时,有可能在读取第一次时,别的线程对其进行修改,所以才会出现非原子性的操作 。

在java中,除单纯的引用类型和非long,double的基本类型变量的赋值才是是原子性的。

实例可参考 32位JVM对long类型的赋值不是原子性操作

End!

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ted_cs/article/details/82963371