java atomicfloat_Java:没有AtomicFloat或AtomicDouble吗?

小编典典

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值