ReentrantLock是java.util.concurrent.locks中的一个可重入锁类,在高竞争的条件下有更好的性能,可以中断。ReentrantLock是基于AQS实现的,AQS是基于FIFO队列实现的,AQS的子类只需要重写模板模式方法即可。
ReentrantLock可以通过构造方法实现公平锁,但一般是非公平锁。非公平锁的实现是线程1调用lock()方法,将state更新为1,然后设置当前线程为独占模式,如果线程2想要获取锁会调用acquire方法,如果tryAcquire返回失败,将线程2加入等待队列。