ReentrantLock 实现原理

不多说,读源码,看类图。其中 ReentrantLock 有三个内部类 Sync ,NonfairSync  ,FairSync 。

 

 ReentrantLock 实现原理


Sync 是一个抽象类,继承自 抽象类 AbstractQueuedSynchronizer。AbstractQueuedSynchronizer 是什么呢?这个就是大名鼎鼎的 AQS 了,其实它是个 FIFo 的队列,里面排队的是等待这个锁的线程。

 

整个 ReentrantLock 就是对 Sync 某个实现的包装。公平锁就包装 FairSync ,非公平锁就包装 NonfairSync 。看源码:

/**
 * Creates an instance of {@code ReentrantLock}with the
 * given fairness policy.
 *
 * @param
fair {@code true}if this lock should use a fair ordering policy
 */
public ReentrantLock(boolean fair) {
   
sync = fair ? new FairSync() : new NonfairSync();
}

 

 

 

总结:ReentrantLock 是通过一个 FIFO 的等待队列来实现的。