Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Как работают wait() и notify()? Где их можно вызывать?
wait() и notify() используются для координации потоков:
wait() освобождает монитор и переводит поток в ожидание
notify() пробуждает один случайный ожидающий поток
Вызывать можно только в synchronized блоках, иначе IllegalMonitorStateException
Как работает связка wait(), notify(), notifyAll()?
wait() — освобождает монитор объекта и переводит поток в режим ожидания.
notify() — пробуждает один случайный поток, ожидающий на этом мониторе.
notifyAll() — пробуждает все потоки, ожидающие на мониторе.
Можно ли вызывать wait() и notify() вне synchronized-блока и почему?
Нет, вызывать wait() и notify() вне synchronized-блока нельзя.
Если попытаться это сделать, будет выброшено IllegalMonitorStateException.
Это связано с тем, что данные методы работают только с монитором объекта.
Поток должен владеть монитором, чтобы управлять ожиданием других потоков.
Так Java защищает модель синхронизации от ошибок.
Чем wait/notify отличаются от использования synchronized на более высоком уровне?
wait/notify — это низкоуровневый механизм координации потоков.synchronized сам по себе отвечает только за взаимное исключение.wait/notify позволяют потокам ожидать выполнения условий.
На более высоком уровне чаще используют Lock, Condition, Semaphore и другие абстракции.
Они проще в использовании и безопаснее.
Что такое wait() и notify()?
wait() и notify() используются для координации работы потоков через общий объект. wait() переводит поток в состояние ожидания, освобождая монитор. notify() будит один из ожидающих потоков. Эти методы работают только в контексте синхронизации.
Где можно вызывать wait() и notify()?
Рейтинг:
4
Сложность:
5
wait() и notify() можно вызывать только внутри синхронизированного блока или метода. Поток должен владеть монитором объекта, на котором вызывается метод. В противном случае будет выброшено исключение. Это правило гарантирует корректную работу синхронизации.
Рейтинг:
1
Сложность:
6
Рейтинг:
2
Сложность:
7
Рейтинг:
5
Сложность:
5
Рейтинг:
4
Сложность:
7
Рейтинг:
5
Сложность:
6