ReentrantLock进行上锁的流程如下图所示,我们将按照下面的流程分析ReentrantLock上锁的流程。
先进入ReentrantLock.lock方法。
再进入内部类NonfairSync的lock方法。
点击acquire方法进入AbstractQueuedSynchronizer.acquire方法。
进入tryAcquire方法回到ReentrantLock.nonfairTryAcquire方法。
再看另一个条件acquireQueued(addWaiter(Node.EXCLUSIVE)。AbstractQueuedSynchronizer.addWaiter方法将当前线程放入阻塞队列中。
之后它会从队列中不断请求获取线程,直到获取为止。