Встречается на собеседованиях • сегодня

Можно ли вызвать метод wait у Object вне блока synchronized

Нет, нельзя. Метод wait() должен вызываться внутри блока synchronized, иначе JVM бросит IllegalMonitorStateException. Это связано с тем, что wait() освобождает монитор объекта, а для этого поток должен сначала его захватить.

Пример с ошибкой:

java
Object obj = new Object();
obj.wait(); // IllegalMonitorStateException

Правильный вариант:

java
synchronized (obj) {
    obj.wait();
}

Без синхронизации нет гарантии, что проверка условия и вызов wait() будут атомарными, что может привести к race condition.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы