title: What are the differences between various threading synchronization options in Java?
body: <p>Can someone explain the various differences between various synchronization methods in Java?</p>
  
  <ul>
  <li>Syncornized blocks (like monitors?)</li>
  <li>Locks - Java concurrent lock.lock()/lock.unlock()</li>
  <li>Semaphores..?</li>
  <li>Object.wait() &amp; Object.notify() (like Mutex?)</li>
  <li>Other classes</li>
  </ul>
  
  <p>So really I wanted to know what are the different Java sync options commonly used and how they map to "traditional"/theoretical Mutexs, Semaphores, Locks, and Monitors.</p>
  
  <p>Cheers!</p>