有没有办法用AtomicInteger
执行“如果结果为正或零”操作的“递减”?
澄清所需的行为:
答案 0 :(得分:13)
答案 1 :(得分:3)
我想你可以做一些类似于Java 8之前的事情:
int val = atomicInt.get();
boolean success = false;
while(val > 0 && !success) {
success = atomicInt.compareAndSet(val, val - 1);
if(!success) {
// Try again if the value is still > 0
val = atomicInt.get();
}
}
// Check 'success' to see if it worked
不是最优雅的代码,但我认为它可以解决问题。
答案 2 :(得分:0)
感谢@JB Nizet。
要知道更新是否成功:
AtomicBoolean isUpdateSuccessful = new AtomicBoolean(false);
atomicInteger.updateAndGet( i -> {
if( i > 0 ) {
isUpdateSuccessful.getAndSet(true);
return i - 1;
} else {
isUpdateSuccessful.getAndSet(false);
return i;
}
});