java.util.concurrent
synchronized и ручная работа с Thread — это низкоуровневые инструменты. Пакет java.util.concurrent даёт готовые, проверенные решения поверх них, чтобы не писать многопоточность «с нуля» каждый раз:
ExecutorService— пулы потоков (подробнее в следующей подтеме);AtomicInteger/AtomicLong— атомарные счётчики безsynchronized(через CAS);ConcurrentHashMap— потокобезопасная map без блокировки всей коллекции целиком;CountDownLatch,CompletableFuture— координация между потоками (дождаться, скомбинировать результаты).
Map<String, Integer> map = new ConcurrentHashMap<>(); // безопасно из нескольких потоков
Правило по умолчанию: если задача стандартная (пул потоков, счётчик, безопасная коллекция) — бери готовое из java.util.concurrent, а не пиши свой synchronized вручную.
🎤 Закрыл тему, если можешь объяснить:
• зачем нужен пакет `java.util.concurrent` и что в нём есть готового.