我知道这:
读和写对于引用变量和大多数原始变量(除了长和双)都是原子的。对于所有声明为可变变量(包括长变量和双变量),读和写都是原子的。
但是我想知道长、长、双、双等变量是自动装箱还是反装箱,读写操作是原子的吗?
例如:
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发布于 2016-08-06 10:07:41
你说过:
对于引用变量和大多数原始变量(除了长和双),读和写都是原子的。
a = 2;这是对引用变量的写,所以它是原子的
b = a;这相当于
read a
call a.longValue()
assign result to b因此,它读取一个引用变量(原子),然后从长对象获得一个不可变的长值(因此原子性无关紧要),并写入一个长原语(因此不能保证是原子的)。
d = 3;这会写入原始的双(所以不能保证是原子的)。
c = d;这相当于
read d
call Double.valueOf(value)
assign result to b因此,它从一个原始的双(所以不能保证是原子的)读取,然后将这个值转换成一个double,然后将那个引用写到一个引用变量(原子)。
https://stackoverflow.com/questions/38802442
复制相似问题