Что такое Реализуй ограниченную BlockingQueue?

Ответ

synchronized + wait/notify. while(!condition) wait() — не if! (spurious wakeups). put() ждёт если полная, take() ждёт если пустая. notifyAll() после каждой операции.

Разбор: Условие ожидания обязательно проверяется в цикле while, а не через if, потому что возможны spurious wakeups и захват ресурса другим потоком между notify и пробуждением. notifyAll() предпочтительнее notify(), так как при наличии и производителей, и потребителей на одном мониторе notify() может разбудить не тот тип потока и привести к зависанию. Thread.sleep вместо wait — это busy-waiting, который не освобождает монитор.

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

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