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