原文链接:
https://juejin.cn/post/7096862549634711566
ReentrantLock
ReentrantLock直译为重入锁,又称为递归锁。
是指在同一个线程中,外部方法获得锁之后,内层的递归方法依然可以获取该锁
倘若锁不具备可重入性,那么我们在第二次获取锁的时候就会造成死锁
复制代码
ReentrantLock的实现是基于AQS的,实现了锁机制和重入机制
ReentrantLock在底层有两种实现方式,分别是公平锁(FairSync)和非公平锁(NonfairSync)
public ReentrantLock() {
sync = new NonfairSync();
}
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}
复制代码
我们在实例化ReentrantLock对象的时候,可以给他传一个boolean类型的变量,如果什么都不传,那么默认生成非公平锁。
公平锁
我们先来看一看公平锁的具体实现
这是公平锁的简易执行流程
是不是看起来特别简单,所以真正的底层实现也不是很难
//这是FairSync的lock方法,用于获取锁,它在这里直接调用了AQS的