Почему wait() проверяют в while, а не if?

Ответ

Spurious wakeup — поток может проснуться сам по себе. После пробуждения условие может быть уже невалидным, нужна повторная проверка.

Разбор: Верная причина — spurious wakeup: поток может проснуться сам, поэтому условие надо перепроверять в цикле, а не один раз через if. Также while закрывает случай, когда условие успел изменить другой проснувшийся поток. Дистракторы либо подменяют это смежной (но другой) проблемой lost wakeup, либо приписывают while/if несуществующие эффекты на счётчик реентрантности монитора.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться