title: State of threads, locks, and conditions
body: <p>In Java if a thread, <code>t2</code>, attempts to attain a lock, from synchronized, which is currently in use by another thread, <code>t1</code>, then <code>t2</code> will switch from runnable to blocked. Correct? What about with <code>ReentrantLock</code>s?</p>
  
  <p>If the thread <code>t1</code> finishes using the lock, does <code>t2</code> then automatically switch back to runnable or do you need to use <code>notifyAll()</code>? What about with <code>ReentrantLock</code> usage without a condition. If you aren't using a condition how do you inform the thread <code>t2</code> that it should switch back to runnable? Is it ever wise, or even possible to use reentrant locks without a condition?</p>
  
  <p>If this question has already been answered (I couldn't find it), I would be grateful if you would link it to me.</p>