Довольно частый сценарий использования атомиков в качестве счётчиков выглядит так:
Запускаем длительную обработку чего-либо
Долго и нудно его инкрементим
По завершению один раз читаем (ну, либо, читаем с некоторой периодичностью, для отображения прогресса)
А так как отдельно метода increment()
у него нет, то используются штатные getAndIncrement()
либо incrementAndGet()
без использования возвращаемого значения. Например:
public void frequentlyCalledMethod(){
doSomeWork();
counter.incrementAndGet();
}
Или может getAndIncrement()
? Хм… А в чём, собственно, разница, кроме очевидного из имени методов?
public final int incrementAndGet() {
return U.getAndAddInt(this, VALUE, 1) + 1;
}
public final int getAndIncrement() {
return U.getAndAddInt(this, VALUE, 1);
}
Ну вы поняли…
Мелочь конечно, но если всё равно отбрасываем результат, то зачем нам лишняя операция?