AtomicInteger: держите неотрицательным
есть ли способ выполнить операцию" уменьшение, если результат положительный или нулевой " с помощью AtomicInteger
?
Чтобы уточнить желаемое поведение:
- если текущее значение больше нуля, уменьшите
- если текущее значение равно нулю, ничего не делать
- (отрицательное текущее значение не обрабатывается)
2 ответов
Я полагаю, вы могли бы сделать что-то вроде этого pre-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
Не самый элегантный код, но я думаю, что он делает трюк.