背景知识
首先看下ReentrantLock的组成结构
ReentrantLock类图
公平锁和非公平锁主要是通过内部类FairSync和NonFairSync中的tryAquire()方法来区分的
概述
ReentrantLock中的公平锁和非公平锁的主要区别为
公平锁中, 线程严格按照先进先出(FIFO)的顺序, 获取锁资源非公平锁中, 拥有锁的线程在释放锁资源的时候, 当前尝试获取锁资源的线程可以和等待队列中的第一个线程竞争锁资源, 这就是ReentrantLcok中非公平锁的含义; 但是已经进入等待队列的线程, 依然是按照先进先出的顺序获取锁资源

公平锁示意图

公平锁示意图
非公平锁示意图
非公平锁示意图
注意: 以上图片中的Head是一个特殊的节点, 仅用于构造等待队列这个数据结构, 不包含等待的线程信息, 所以下一个可以获取锁资源的节点是Node1节点
源码解读

非公平锁