Ответ
В Java есть несколько потокобезопасных коллекций из пакета java.util.concurrent:
- CopyOnWriteArrayList - потокобезопасный аналог ArrayList. При изменении создает новую копию массива. Подходит для частого чтения и редкой записи.
List<String> list = new CopyOnWriteArrayList<>();
- ConcurrentHashMap - потокобезопасная версия HashMap с сегментированной блокировкой, обеспечивающей высокую производительность.
Map<String, String> map = new ConcurrentHashMap<>();
-
ConcurrentLinkedQueue - неблокирующая потокобезопасная очередь на основе CAS-операций.
-
BlockingQueue и ее реализации (ArrayBlockingQueue, LinkedBlockingQueue) - блокирующие очереди с поддержкой ожидания при пустой/полной очереди.
-
ConcurrentSkipListMap/SkipListSet - аналоги TreeMap/TreeSet с поддержкой многопоточности.
Для синхронизации обычных коллекций можно использовать Collections.synchronizedList(), но это менее эффективно чем concurrent-коллекции.