Выбирайте примитив по задаче: synchronized/Lock для критической секции, volatile/atomic для видимости и отдельных операций, latch/barrier/semaphore для координации.
Как блокировать потоки или синхронизировать их в Java?
Выбирайте примитив по задаче: 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++ атомарным и не защищает составной инвариант.