Ответ
Пакет java.util.concurrent (JUC) предоставляет высокоуровневые API для параллельного программирования в Java, устраняя необходимость вручную работать с низкоуровневыми примитивами (Thread, synchronized).
Ключевые компоненты:
-
Фреймворк Executor для управления пулами потоков:
Executor,ExecutorService– интерфейсы для выполнения задач.ThreadPoolExecutor,ScheduledThreadPoolExecutor– реализации пулов.Executors– фабрика для создания стандартных пулов.
-
Потокобезопасные коллекции (Concurrent Collections):
ConcurrentHashMap,ConcurrentSkipListMapCopyOnWriteArrayList,CopyOnWriteArraySetBlockingQueue(ArrayBlockingQueue,LinkedBlockingQueue) и ее реализации.
-
Синхронизаторы для координации потоков:
CountDownLatch– ожидание завершения набора операций.CyclicBarrier– ожидание сбора группы потоков в точке барьера.Semaphore– контроль доступа к ресурсу с ограниченной емкостью.Exchanger– обмен данными между двумя потоками.
-
Атомарные переменные для lock-free программирования:
AtomicInteger,AtomicLong,AtomicBooleanAtomicReference,AtomicStampedReference
-
Усовершенствованные механизмы блокировок:
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(); // Инициируем упорядоченное завершение