Мы все знаем, что для вызова Object.wait()
этот вызов должен быть помещен в синхронизированный блок, иначе IllegalMonitorStateException
. Но , в чем причина для этого ограничения? Я знаю, что wait()
выпускает монитор, но зачем нам явно получать монитор, сделав конкретный блок синхронизированным, а затем отпустите монитор, вызвав wait()
?
Каков потенциальный ущерб, если было возможно вызвать wait()
вне синхронизированного блока, сохранив его семантику - приостановив поток вызывающего?