Этап 6 из 11 · ≈ 6 ч

Конкурентные коллекции и координация

Основа с Middle

ConcurrentHashMap, CopyOnWrite, BlockingQueue, семафоры, защёлки и барьеры.

Что важно знать

  • ConcurrentHashMap — без блокировки всей таблицы; составные действия — через compute, merge, putIfAbsent.
  • CopyOnWriteArrayList — для частого чтения и редкой записи.
  • BlockingQueue — естественный способ передачи работы между потоками.
  • Semaphore ограничивает параллельность, CountDownLatch ждёт событий.

Критерии освоения

Middle ≈ 6 ч

  • Объясняет устройство ConcurrentHashMap и атомарные операции compute и merge
  • Использует BlockingQueue для производителей и потребителей
  • Применяет Semaphore, CountDownLatch и CyclicBarrier

Практика. Реализовать конвейер производитель — потребитель на BlockingQueue с корректным завершением.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Несколько потоков одновременно пишут в обычную HashMap. Чем это грозит?Junior

HashMap не потокобезопасен: параллельная запись ломает структуру — потерянные записи, неверный size, в старых версиях — зависание обхода.

Полный разбор
Чем HashMap отличается от Hashtable и ConcurrentHashMap?Middle

HashMap — не потокобезопасна, допускает один null-ключ и null-значения. Hashtable — устаревшая, все методы synchronized, null запрещён. ConcurrentHashMap — потокобезопасная с мелкой блокировкой, null запрещён.

Полный разбор
Как устроен ConcurrentHashMap в Java 8+ и почему он эффективнее synchronized Map?Senior

Java 8+: массив корзин; вставка в пустую корзину — CAS без блокировки, при коллизии — synchronized на первом узле корзины. Блокируется только одна корзина, а чтение вовсе без блокировок (volatile-поля).

Полный разбор
Что делает CountDownLatch?Junior

CountDownLatch — защёлка на счётчике: потоки ждут в await(), пока другие не уменьшат счётчик до нуля через countDown().

Полный разбор
Чем различаются CountDownLatch, CyclicBarrier и Semaphore?Middle

CountDownLatch — одноразовое ожидание N событий: дошёл до нуля — открыт навсегда. CyclicBarrier — переиспользуемая точка встречи N потоков между раундами. Semaphore — ограничение числа одновременных доступов к ресурсу.

Полный разбор
Чем fail-fast итератор отличается от weakly consistent?Senior

Fail-fast итератор (ArrayList, HashMap) замечает структурное изменение коллекции не через него и бросает ConcurrentModificationException — по возможности, без гарантии. Weakly consistent (ConcurrentHashMap, ConcurrentLinkedQueue) не падает, обходит каждый…

Полный разбор

Разборы темы

← Вся карта «Java»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования