Как блокировать потоки или синхронизировать их в Java?

Выбирайте примитив по задаче: synchronized/Lock для критической секции, volatile/atomic для видимости и отдельных операций, latch/barrier/semaphore для координации.

Короткий ответ

Что ответить на собеседовании

Выбирайте примитив по задаче: synchronized/Lock для критической секции, volatile/atomic для видимости и отдельных операций, latch/barrier/semaphore для координации.

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

Ответ с пояснениями

Выбирайте примитив по задаче: synchronized/Lock для критической секции, volatile/atomic для видимости и отдельных операций, latch/barrier/semaphore для координации.

BlockingQueue удобно передаёт работу с ожиданием, CountDownLatch ждёт завершения заданного числа действий, Semaphore ограничивает конкурентный доступ. wait вызывается под монитором и в цикле проверки условия; sleep не освобождает удерживаемый monitor и не заменяет синхронизацию. При Lock используйте finally для unlock, учитывайте interruption и единый порядок locks. Volatile не делает counter++ атомарным и не защищает составной инвариант.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее