簡體   English   中英

在java中,當諸如Long,long,Double,double之類的變量是自動裝箱或拆箱時,是讀取還是寫入操作原子?

[英]In java, when variables such as Long, long, Double ,double are autoboxing or unboxing, is reading or writing operation atomic?

我知道這個

讀取和寫入對於引用變量和大多數原始變量(除long和double之外的所有類型)都是原子的。 對於聲明為volatile的所有變量(包括長變量和雙變量),讀取和寫入都是原子的。

但我想知道當Long,long,Double,double等變量是自動裝箱或拆箱時,是讀取還是寫入操作原子?

例如:

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

你說:

讀取和寫入對於引用變量和大多數原始變量(除long和double之外的所有類型)都是原子的

a = 2;

這是對引用變量的寫入,因此它是原子的

b = a;

這相當於

read a
call a.longValue()
assign result to b

所以這會讀取一個引用變量(原子),然后從Long對象中獲取一個不可變的long值(因此原子性無關緊要)並寫入一個長原語(因此不能保證是原子的)

d = 3;

這寫入一個原始的double(所以不能保證是原子的)

c = d;

這相當於

read d
call Double.valueOf(value)
assign result to b

所以這從原始double讀取(因此不保證是原子的),然后將值轉換為Double並將該引用寫入引用變量(原子)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM