获取锁的过程:
acquire ()申请锁资源时,如果成功,它将进入临界区
当获取锁失败时,它进入一个 FIFO 等待队列并被阻塞,等待唤醒
当队列中的等待线程被唤醒时,会再次尝试获取锁资源。...如果成功,它进入临界区,否则它将继续阻塞,等待唤醒
释放锁过程:
当线程调用release()来释放锁资源时,如果没有其他线程在等待锁资源,那么释放就完成了。...注意:Thread.interrupted()方法在返回中断标志时清除中断标志,也就是说,当中断被唤醒并且锁成功时,整个quireQueued方法返回TRUE以指示中断被唤醒,但是如果中断被唤醒并且锁没有被获取...最后,我们返回到acquireQueued方法的最后一步,即finally模块.这是在锁定资源获取失败之后完成的一些后续工作, 看上面的代码,实际上可以在这里输入的是tryAcquire()方法引发异常...一般的想法很简单:尝试获取锁,并在失败时加入队列挂起。当锁被释放时,如果队列中有等待的线程,锁就会被唤醒。