Выбор структуры определяется характером нагрузки:


Для словарей почти всегда подойдёт ConcurrentHashMap, если не нужен строгий порядок ключей (тогда обратите внимание на ConcurrentSkipListMap).
Для счётчиков — LongAdder при высоком уровне конкуренции, AtomicLong — если число потоков невелико или нужна мгновенная атомарность.
Для очередей — ConcurrentLinkedQueu
e в неблокирующих сценариях, а ArrayBlockingQueue или LinkedBlockingQueue — если требуется ограничить размер и организовать ожидание.
Важная тонкост
ь: даже неблокирующие структуры могут страдать от ложного разделения (false sharing), когда несколько переменных попадают в одну кэш-линию процессора. Для таких случаев предусмотрена аннотация @Contended (начиная с Java 8, требуется отключить ограничение через -XX:-RestrictContended). Она помогает разнести поля по разным кэш-линиям и избежать лишней синхронизации на уровне аппаратуры.
Просмотры: 51
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти