[英]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.