3
有一個在atomics package summary的最後一張紙條,上面規定:添加原子雙打
...您也可以使用
Float.floatToIntBits
和Float.intBitstoFloat
轉換,以及doubles
使用Double.doubleToLongBits
和Double.longBitsToDouble
轉換持有floats
。
顯然,你不能只是添加這些值在一起,因此這將是相當於原子addAndGet
爲double
值。
private AtomicLong sum = new AtomicLong();
...
// This would almost certainly NOT work.
public long add(double n) {
return sum.addAndGet(Double.doubleToLongBits(n));
}
你可以假設我很努力地不使用。
啊是的!我可以看到,如果不使用JNI和彙編器,這將是唯一的方法。您能否將解決方案發布爲完整性代碼?只要addAndGet就足夠了。 – OldCurmudgeon 2012-03-26 15:17:49
已發佈解決方案。 – 2012-03-26 15:20:46
儘管飢餓在理論上可能成爲一個問題,但我猜這在實踐中並不真正發生。 – biziclop 2012-03-26 15:22:45