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实现锁的可重入
锁重入功能-加锁
锁重入功能-解锁