ReentrantLock使用
ReentrantLock 实现了Lock接口, 内置了Sync同步器继承了AbstractQueuedSynchronizer。
Sync是抽象类,有两个实现NonfairSync非公平,FairSync公平。
所以ReentrantLock有公平锁和非公平锁。默认是非公平锁。
public static void main(String[] args) {
ReentrantLock reentrantLock = new ReentrantLock();
reentrantLock.lock();
try {
}finally {
reentrantLock.unlock();
}
}
ReentrantLock构造器是使用的非公平同步器

ReentrantLock的lock加锁方法

lock方法的具体实现

CAS尝试0->1,设置owner为当前线程。如果失败

进入tryAcquire逻辑,进入addWaiter逻辑,构造Node队列

Node队列是一个双向链表,有header节点、tail节点,


ReentrantLock的unlock解锁方法


这里的解锁方法逻辑里面,包含有锁可重入功能。


ReentrantLock的tryLock实现锁的可重入

锁重入功能-加锁

锁重入功能-解锁

ReentrantLock不可打断模式

ReentrantLock可打断模式






















