Ответ
Потокобезопасные (concurrent) коллекции находятся в пакете java.util.concurrent. Они предназначены для безопасного использования в многопоточных приложениях без необходимости внешней синхронизации.
Основные классы и их назначение:
ConcurrentHashMap<K,V>— потокобезопасный аналогHashMap. Обеспечивает высокую производительность за счёт сегментирования (locking на уровне сегментов).CopyOnWriteArrayList<E>— список, где все мутирующие операции создают новую копию внутреннего массива. Идеален для сценариев «частое чтение, редкая запись».BlockingQueue<E>(и реализации, например,ArrayBlockingQueue) — очередь, которая блокирует поток при попытке извлечь элемент из пустой очереди или добавить в полную.
Пример использования ConcurrentHashMap:
import java.util.concurrent.ConcurrentHashMap;
public class Example {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> concurrentMap = new ConcurrentHashMap<>();
// Потокобезопасные операции
concurrentMap.put("counter", 1);
// Атомарное обновление
concurrentMap.compute("counter", (key, val) -> (val == null) ? 1 : val + 1);
System.out.println(concurrentMap.get("counter")); // 2
}
}
Важно: Эти коллекции обеспечивают безопасность на уровне отдельных операций, но для составных действий (например, «проверить и затем добавить») могут потребоваться дополнительные синхронизации или использование атомарных методов (например, putIfAbsent).