Ответ
Потокобезопасные коллекции из пакета java.util.concurrent:
| Коллекция | Назначение и особенности |
|---|---|
ConcurrentHashMap<K,V> |
Потокобезопасная Map. Использует сегментирование блокировок (в старых версиях) или CAS-операции (с Java 8), что позволяет высокий параллелизм при чтении и записи. |
CopyOnWriteArrayList<E> |
List, где каждая модификация создает новую копию внутреннего массива. Идеален для сценариев «частое чтение, редкая запись» (например, список слушателей событий). |
CopyOnWriteArraySet<E> |
Реализация Set на основе CopyOnWriteArrayList. |
ConcurrentLinkedQueue<E> |
Неблокирующая, потокобезопасная очередь на основе связанных узлов и алгоритма CAS. |
ConcurrentSkipListMap<K,V> |
Потокобезопасная, отсортированная Map на основе skip-list. |
ConcurrentSkipListSet<E> |
Потокобезопасный, отсортированный Set на основе ConcurrentSkipListMap. |
Блокирующие очереди (реализуют BlockingQueue):
ArrayBlockingQueue— очередь на массиве фиксированного размера.LinkedBlockingQueue— очередь на связном списке, может иметь ограничение или быть неограниченной.PriorityBlockingQueue— приоритетная блокирующая очередь.SynchronousQueue— очередь, которая передает элементы непосредственно от производителя к потребителю.
Пример использования ConcurrentHashMap:
import java.util.concurrent.ConcurrentHashMap;
ConcurrentHashMap<String, Integer> scores = new ConcurrentHashMap<>();
// Потокобезопасные операции
scores.put("Alice", 100);
scores.computeIfPresent("Alice", (k, v) -> v + 50); // Alice: 150