java.util.concurrent程序包的API文档规定以下内容:
[…]此外,仅为在预期应用程序中通常有用的那些类型提供类。 例如,没有用于表示字节的原子类。如果您不希望这样做,可以使用an
AtomicInteger来保存字节值,并进行适当的转换。
您还可以使用Float.floatToIntBits和Float.intBitstoFloat转换来保存浮点数,并使用Double.doubleToLongBits和Double.longBitsToDouble转换来保留双精度数。
我并不是说这是一个方便的解决方案,但这似乎是一种解释。我想您可能想包装
AtomicInteger和为
getFloat/
setFloatetc
提供访问方法。
我实际上写了一篇。干得好:
import java.util.concurrent.atomic.AtomicInteger;import static java.lang.Float.*;class AtomicFloat extends Number { private AtomicInteger bits; public AtomicFloat() { this(0f); } public AtomicFloat(float initialValue) { bits = new AtomicInteger(floatToIntBits(initialValue)); } public final boolean compareAndSet(float expect, float update) { return bits.compareAndSet(floatToIntBits(expect), floatToIntBits(update)); } public final void set(float newValue) { bits.set(floatToIntBits(newValue)); } public final float get() { return intBitsToFloat(bits.get()); } public float floatValue() { return get(); } public final float getAndSet(float newValue) { return intBitsToFloat(bits.getAndSet(floatToIntBits(newValue))); } public final boolean weakCompareAndSet(float expect, float update) { return bits.weakCompareAndSet(floatToIntBits(expect), floatToIntBits(update)); } public double doublevalue() { return (double) floatValue(); } public int intValue() { return (int) get();} public long longValue() { return (long) get(); }}


