As per java doc , A reentrant mutual exclusion Lock with the same basic
behavior and semantics as the implicit monitor lock accessed using synchronized methods and statements, but with extended
A ReentrantLock is owned by the thread last
successfully locking, but not yet unlocking it. A thread invoking lock will return, successfully acquiring the lock, when
the lock is not owned by another thread. The method will return
immediately if the current thread already owns the lock. This can
be checked using methods isHeldByCurrentThread}, and getHoldCount.