0

此操作是原子操作还是两者之间存在数据竞争的可能性?

atomicInteger.set(-atomicInteger.get());

如果存在数据竞争,如何以AtomicInteger原子方式否定?

4

3 回答 3

4

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;
    }
}
于 2013-10-06T03:26:09.973 回答
1

不,您需要同步才能锁定我猜的实例。

AtomicInteger 有很多方法可以 getAndSet 但没有做逆向...

显然,这是之前在 SO 上问过的AtomicBoolean 没有 negate() 方法吗?该页面上的解决方案很有趣。

于 2013-10-06T03:15:56.807 回答
0
public final int getAndDecrement()

以原子方式将当前值减一。返回上一个值

AtomicInteger itsCounter = new AtomicInteger();
itsCounter.getAndDecrement();
于 2013-10-06T03:24:53.810 回答