Многопоточность middle
Что такое Реализуй ограниченную 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.