[1-й вариант]
- через вызов метода
Collections.synchronized()- преобразует обычную коллекцию в синхронизированную
- создаёт обёртку, которая синхронизирует все операции с помощью ключевого слова
synchronized[2-й вариант]
-
CopyOnWriteArrayList- если работа с коллекцией в основном состоит из чтения, это лучший вариант с точки зрения производительности
- потокобезопасность достигается за счёт копирования внутреннего массива при каждом изменении, при этом исходный массив остаётся неизменяемым
- порядок выполнения (visibility/упорядоченность) обеспечивается использованием модификатора
volatile для внутреннего массива[3-й вариант]
- concurrent-коллекции
- неблокирующие хеш-таблицы:
ConcurrentSkipListMap, ConcurrentHashMap и ConcurrentSkipListSet (в основе реализации лежит хеш-таблица)- неблокирующие очереди:
ConcurrentLinkedQueue и ConcurrentLinkedDeque- широкий набор различных блокирующих очередей
👉 Java Portal