Java:没有AtomicFloat或AtomicDouble吗?

我已经找到了AtomicInteger,,AtomicLong但是AtomicFloat(或AtomicDouble)在哪里?也许有一些窍门?

回答:

java.util.concurrent程序包的API文档规定以下内容:

[…]此外,仅为在预期应用程序中通常有用的那些类型提供类。 例如,没有用于表示字节的原子类。如果您不希望这样做,可以使用an

AtomicInteger来保存字节值,并进行适当的转换。

我并不是说这是一个方便的解决方案,但这似乎是一种解释。我想您可能想包装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(); }

}

以上是 Java:没有AtomicFloat或AtomicDouble吗? 的全部内容, 来源链接: utcz.com/qa/424552.html

回到顶部