Relevant Articles: Binary Semaphore vs Reentrant Lock Bad Practices With Synchronization Start Two Threads at the Exact Same Time in Java Volatile Variables and Thread Safety