版权声明: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!