Thread Synchronization
https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html
- 
- Mutex Semaphore (aka Mutex) controls only one thread at a time executing on the shared resource by lock & unlock.
 - Counting Semaphore (aka Semaphore – Java7) controls the number of threads executing on the shared resource by acquire & release.
 - Monitor controls only one thread at a time, and can execute in the monitor (shared object) by wait & notify/notifyAll.
 
 
