Практическое использование DoubleAdder в Java - PullRequest
0 голосов
/ 16 июня 2020

Учусь к тому же многопоточности. Проходя через AtomicInteger, AtomicBoolean et c ... увидел, что существует один класс с именем DoubleAdder

Подобно тому, как AtomicInteger может использоваться многими потоками одновременно. Когда мы используем переменную AtomicInteger в многопоточной среде, нам не нужны ключевые слова synchronized и volatile, поскольку целые числа atomi c заботятся о безопасности потоков.

Может кто-нибудь, пожалуйста, разработайте варианты использования DoubleAdder class?

1 Ответ

2 голосов
/ 16 июня 2020

AtomicInteger, AtomicLong и все другие переменные Atomi c часто используют одну строку кэша для обновлений. Это означает, что каждый раз, когда происходит запись, все потоки, использующие один и тот же объект Atomi c, будут иметь недействительность кеша, что приведет к замедлению, которое требуется для синхронизации.

В системах, где вы одновременно добавляете много, и в системе, где вы не зависите от точных значений, лучше всего подходит DoubleAdder. Каждый поток имеет свой собственный объект сумматора, который увеличивается (позволяя каждому потоку не аннулировать другой поток). В конце вы можете запросить у DoubleAdder сумму увеличивающихся значений всех потоков.

Наиболее распространенный вариант использования DoubleAdder - это метрики или статистика. Часто требуется достаточно хорошее отслеживание показателей, но не всегда требуется точная точность.

В самом конце, когда все потоки остановлены, если вы спросите DoubleAdder о сумме всех потоков, вы получите 100% точность.

...