В каком пакете Java находятся потокобезопасные коллекции?

«В каком пакете Java находятся потокобезопасные коллекции?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Потокобезопасные (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).