小编典典
[…]此外,仅为在预期应用程序中通常有用的那些类型提供类。 例如,没有用于表示字节的原子类。如果您不希望这样做,可以使用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(); }
}
2020-09-16