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