内容来着《Java 高级程序员面试笔试宝典》

从前文的分析可知,ReentrantLock在底层有两种实现方式,分别是FairSync(公平锁)和NonfairSync(非公平锁),下面分别从实现流程与源代码出发来介绍这两种锁的实现原理。

它们各自的lock()方法的简化流程如图6-10所示。

image.png

图6-10 公平锁与非公平锁的lock方法处理流程

(1)FairSync的实现

从图6-10可以看出,FairSync的处理流程较为简单,它的实现源码如下所示:

image.png

FairSync 与 NonfairSync 都会调用同样的 acquire 方法,因此有必要了解一下acquire方法的实现: