AtomicInteger, AtomicLong и все другие переменные Atomi c часто используют одну строку кэша для обновлений. Это означает, что каждый раз, когда происходит запись, все потоки, использующие один и тот же объект Atomi c, будут иметь недействительность кеша, что приведет к замедлению, которое требуется для синхронизации.
В системах, где вы одновременно добавляете много, и в системе, где вы не зависите от точных значений, лучше всего подходит DoubleAdder. Каждый поток имеет свой собственный объект сумматора, который увеличивается (позволяя каждому потоку не аннулировать другой поток). В конце вы можете запросить у DoubleAdder сумму увеличивающихся значений всех потоков.
Наиболее распространенный вариант использования DoubleAdder - это метрики или статистика. Часто требуется достаточно хорошее отслеживание показателей, но не всегда требуется точная точность.
В самом конце, когда все потоки остановлены, если вы спросите DoubleAdder о сумме всех потоков, вы получите 100% точность.