While reading the source code of ReentrantLock, I found that internally it use a synchronizer which extends AbstractQueuedSynchronizer to control t
ReentrantLock
AbstractQueuedSynchronizer