Что содержится в пакете java.util.concurrent?

«Что содержится в пакете java.util.concurrent?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Пакет java.util.concurrent (JUC) предоставляет высокоуровневые API для параллельного программирования в Java, устраняя необходимость вручную работать с низкоуровневыми примитивами (Thread, synchronized).

Ключевые компоненты:

  1. Фреймворк Executor для управления пулами потоков:

    • Executor, ExecutorService – интерфейсы для выполнения задач.
    • ThreadPoolExecutor, ScheduledThreadPoolExecutor – реализации пулов.
    • Executors – фабрика для создания стандартных пулов.
  2. Потокобезопасные коллекции (Concurrent Collections):

    • ConcurrentHashMap, ConcurrentSkipListMap
    • CopyOnWriteArrayList, CopyOnWriteArraySet
    • BlockingQueue (ArrayBlockingQueue, LinkedBlockingQueue) и ее реализации.
  3. Синхронизаторы для координации потоков:

    • CountDownLatch – ожидание завершения набора операций.
    • CyclicBarrier – ожидание сбора группы потоков в точке барьера.
    • Semaphore – контроль доступа к ресурсу с ограниченной емкостью.
    • Exchanger – обмен данными между двумя потоками.
  4. Атомарные переменные для lock-free программирования:

    • AtomicInteger, AtomicLong, AtomicBoolean
    • AtomicReference, AtomicStampedReference
  5. Усовершенствованные механизмы блокировок:

    • Lock интерфейс и его реализация ReentrantLock.
    • ReadWriteLock для разделения блокировок на чтение/запись.

Пример использования ExecutorService:

ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
    int taskId = i;
    executor.submit(() -> {
        System.out.println("Executing task " + taskId + " on " + Thread.currentThread().getName());
    });
}
executor.shutdown(); // Инициируем упорядоченное завершение