這個操作是原子的還是有數據競爭的機會?AtomicInteger的嵌套方法調用在java中也是原子的
atomicInteger.set(-atomicInteger.get());
如果有數據競爭,如何否定AtomicInteger
原子?
這個操作是原子的還是有數據競爭的機會?AtomicInteger的嵌套方法調用在java中也是原子的
atomicInteger.set(-atomicInteger.get());
如果有數據競爭,如何否定AtomicInteger
原子?
不,你需要同步來鎖定我想要的實例。
的AtomicInteger有很多的方法來getAndSet但沒有做反向...
顯然,這是問之前SO Does AtomicBoolean not have a negate() method?頁面上的解決方案是有趣的。
public final int getAndDecrement()
以原子減一的當前值。返回前值
AtomicInteger itsCounter = new AtomicInteger();
itsCounter.getAndDecrement();
謝謝,但我實際上是在詢問否定和不遞減的價值 – mindreader
我會做這樣
public int getAndNegate(AtomicInteger i) {
for (;;) {
int current = i.get();
int next = -current;
if (i.compareAndSet(current, next))
return current;
}
}
否;這將無法正常工作。請參閱http://blog.slaks.net/2013-07-22/thread-safe-data-structures/ – SLaks