首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中,当长、长、双、双等变量都是自动装箱或取消装箱时,读写操作是原子操作吗?

在java中,当长、长、双、双等变量都是自动装箱或取消装箱时,读写操作是原子操作吗?
EN

Stack Overflow用户
提问于 2016-08-06 08:59:19
回答 1查看 152关注 0票数 3

我知道

读和写对于引用变量和大多数原始变量(除了长和双)都是原子的。对于所有声明为可变变量(包括长变量和双变量),读和写都是原子的。

但是我想知道长、长、双、双等变量是自动装箱还是反装箱,读写操作是原子的吗?

例如:

代码语言:javascript
复制
private Long a;    
private long b;    
private Double c;    
private double d;

a = 2; //is this operation atomic?    
b = a; //is this operation atomic?    
d = 3;    
c = d; //is this operation atomic
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-06 10:07:41

你说过:

对于引用变量和大多数原始变量(除了长和双),读和写都是原子的。

代码语言:javascript
复制
a = 2;

这是对引用变量的写,所以它是原子的

代码语言:javascript
复制
b = a;

这相当于

代码语言:javascript
复制
read a
call a.longValue()
assign result to b

因此,它读取一个引用变量(原子),然后从长对象获得一个不可变的长值(因此原子性无关紧要),并写入一个长原语(因此不能保证是原子的)。

代码语言:javascript
复制
d = 3;

这会写入原始的双(所以不能保证是原子的)。

代码语言:javascript
复制
c = d;

这相当于

代码语言:javascript
复制
read d
call Double.valueOf(value)
assign result to b

因此,它从一个原始的双(所以不能保证是原子的)读取,然后将这个值转换成一个double,然后将那个引用写到一个引用变量(原子)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38802442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档