此操作是原子操作还是两者之间存在数据竞争的可能性?
atomicInteger.set(-atomicInteger.get());
如果存在数据竞争,如何以AtomicInteger
原子方式否定?
此操作是原子操作还是两者之间存在数据竞争的可能性?
atomicInteger.set(-atomicInteger.get());
如果存在数据竞争,如何以AtomicInteger
原子方式否定?
I would do it this way
public int getAndNegate(AtomicInteger i) {
for (;;) {
int current = i.get();
int next = -current;
if (i.compareAndSet(current, next))
return current;
}
}
不,您需要同步才能锁定我猜的实例。
AtomicInteger 有很多方法可以 getAndSet 但没有做逆向...
显然,这是之前在 SO 上问过的AtomicBoolean 没有 negate() 方法吗?该页面上的解决方案很有趣。
public final int getAndDecrement()
以原子方式将当前值减一。返回上一个值
AtomicInteger itsCounter = new AtomicInteger();
itsCounter.getAndDecrement();