atomic java,Java:有没有AtomicFloat或AtomicDouble?

I have found AtomicInteger, AtomicLong, but where is AtomicFloat (or AtomicDouble)? Maybe there is some trick?

解决方案

The API docs for the java.util.concurrent package states the following:

[...] Additionally, classes are provided only for those types that are commonly useful in intended applications. For example, there is no atomic class for representing byte. In those infrequent cases where you would like to do so, you can use an AtomicInteger to hold byte values, and cast appropriately. You can also hold floats using Float.floatToIntBits and Float.intBitstoFloat conversions, and doubles using Double.doubleToLongBits and Double.longBitsToDouble conversions.

I'm not claiming it's a convenient solution, but that seems to be the explanation. I suppose you would probably want to wrap an AtomicInteger and provide access methods for getFloat / setFloat etc.

I actually got around writing one. Here you go:

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(); }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值