title: Why Lock condition await must hold the lock
body: <p>I am in doubt with that , in Java language, we need to acquire the lock, before we await some condition to be satisfied.</p>
  
  <p>For example, int java monitor lock:</p>
  
  <pre><code>synchronized(lock){
     System.out.println("before lock ...");
     lock.wait();
     System.out.println("after lock ...");
  }
  </code></pre>
  
  <p>or the concurrency utils:</p>
  
  <pre><code>Lock lock = new ReentrantLock();
  Condition cond = lock.newCondition();
  
  lock.lock();
  try{
       System.out.println("before condition ...");
       cond.await();
       System.out.println("after condition ...");
  }catch(Exception e){
       e.printStackTrace();
  }finally{
       lock.unlock();
  }
  </code></pre>
  
  <p>So, why we can't await, without hold the lock ?</p>
  
  <p>Does other languages differ, or it's just in Java?</p>
  
  <p>I hope you can explain the reason after the design, but not only for JAVA-SPEC definition. </p>