java原子整数,实现一个原子的正整数类:AtomicPositiveInteger详解

importjava.util.concurrent.atomic.AtomicInteger;public class AtomicPositiveInteger extendsNumber {private static final long serialVersionUID = -3038533876489105940L;private finalAtomicInteger i;publicAtomicPositiveInteger() {

i= newAtomicInteger();

}public AtomicPositiveInteger(intinitialValue) {

i= newAtomicInteger(initialValue);

}public final intgetAndIncrement() {for(;;) {int current =i.get();int next = (current >= Integer.MAX_VALUE ? 0 : current + 1);if(i.compareAndSet(current, next)) {returncurrent;

}

}

}public final intgetAndDecrement() {for(;;) {int current =i.get();int next = (current <= 0 ? Integer.MAX_VALUE : current - 1);if(i.compareAndSet(current, next)) {returncurrent;

}

}

}public final intincrementAndGet() {for(;;) {int current =i.get();int next = (current >= Integer.MAX_VALUE ? 0 : current + 1);if(i.compareAndSet(current, next)) {returnnext;

}

}

}public final intdecrementAndGet() {for(;;) {int current =i.get();int next = (current <= 0 ? Integer.MAX_VALUE : current - 1);if(i.compareAndSet(current, next)) {returnnext;

}

}

}public final intget() {returni.get();

}public final void set(intnewValue) {if (newValue < 0) {throw new IllegalArgumentException("new value " + newValue + " < 0");

}

i.set(newValue);

}public final int getAndSet(intnewValue) {if (newValue < 0) {throw new IllegalArgumentException("new value " + newValue + " < 0");

}returni.getAndSet(newValue);

}public final int getAndAdd(intdelta) {if (delta < 0) {throw new IllegalArgumentException("delta " + delta + " < 0");

}for(;;) {int current =i.get();int next = (current >= Integer.MAX_VALUE - delta + 1 ? delta - 1 : current +delta);if(i.compareAndSet(current, next)) {returncurrent;

}

}

}public final int addAndGet(intdelta) {if (delta < 0) {throw new IllegalArgumentException("delta " + delta + " < 0");

}for(;;) {int current =i.get();int next = (current >= Integer.MAX_VALUE - delta + 1 ? delta - 1 : current +delta);if(i.compareAndSet(current, next)) {returnnext;

}

}

}public final boolean compareAndSet(int expect, intupdate) {if (update < 0) {throw new IllegalArgumentException("update value " + update + " < 0");

}returni.compareAndSet(expect, update);

}public final boolean weakCompareAndSet(int expect, intupdate) {if (update < 0) {throw new IllegalArgumentException("update value " + update + " < 0");

}returni.weakCompareAndSet(expect, update);

}public bytebyteValue() {returni.byteValue();

}public shortshortValue() {returni.shortValue();

}public intintValue() {returni.intValue();

}public longlongValue() {returni.longValue();

}public floatfloatValue() {returni.floatValue();

}public doubledoubleValue() {returni.doubleValue();

}publicString toString() {returni.toString();

}

@Overridepublic inthashCode() {final int prime = 31;int result = 1;

result= prime * result + ((i == null) ? 0: i.hashCode());returnresult;

}

@Overridepublic booleanequals(Object obj) {if (this == obj) return true;if (obj == null) return false;if (getClass() != obj.getClass()) return false;

AtomicPositiveInteger other=(AtomicPositiveInteger) obj;if (i == null) {if (other.i != null) return false;

}else if (!i.equals(other.i)) return false;return true;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值