Java:没有AtomicFloat或AtomicDouble吗?
我已经找到了AtomicInteger
,,AtomicLong
但是AtomicFloat
(或AtomicDouble
)在哪里?也许有一些窍门?
回答:
java.util.concurrent
程序包的API文档规定以下内容:
[…]此外,仅为在预期应用程序中通常有用的那些类型提供类。 例如,没有用于表示字节的原子类。如果您不希望这样做,可以使用an
AtomicInteger
来保存字节值,并进行适当的转换。
我并不是说这是一个方便的解决方案,但这似乎是一种解释。我想您可能想包装AtomicInteger
和为getFloat
/ setFloat
etc
提供访问方法。
我实际上写了一篇。干得好:
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(); }
}
以上是 Java:没有AtomicFloat或AtomicDouble吗? 的全部内容, 来源链接: utcz.com/qa/424552.html