Довольно частый сценарий использования атомиков в качестве счётчиков выглядит так:
Запускаем длительную обработку чего-либо
Долго и нудно его инкрементим
По завершению один раз читаем (ну, либо, читаем с некоторой периодичностью, для отображения прогресса)
А так как отдельно метода 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); }
Ну вы поняли…
Мелочь конечно, но если всё равно отбрасываем результат, то зачем нам лишняя операция?
