title: Why must wait() always be in synchronized block
body: <p>We all know that in order to invoke <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait%28%29" rel="noreferrer"><code>Object.wait()</code></a>, this call must be placed in synchronized block, otherwise an <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalMonitorStateException.html" rel="noreferrer"><code>IllegalMonitorStateException</code></a> is thrown. But <strong>what's the reason for making this restriction?</strong> I know that <code>wait()</code> releases the monitor, but why do we need to explicitly acquire the monitor by making particular block synchronized and then release the monitor by calling <code>wait()</code>?</p>
  
  <p>What is the potential damage if it was possible to invoke <code>wait()</code> outside a synchronized block, retaining it's semantics - suspending the caller thread?</p>