ReentrantLock 流程图
2021-02-17 00:10:41 1 举报
java
作者其他创作
大纲/内容
Y
acquire(int)
N
结束
acquireQueued()
点线为公平锁
setState(int)记录重入次数
release(int)
Node addWaiter(Node)&& enq(Node)包装当前线程为node节点并加入CLH队列
true
sync = NonfairSync
ReentrantLock(boolearn)
unlock()
Sync
hasQueuedPredecessors()判断CLH队列是否还在排队
线程被唤醒
boolean tryAcquire
state - (int releases)state 为零则释放锁
获取锁
tryRelease(int)
死循环开始判断尝试获取锁
unparkSuccessor(Node)唤醒下一个 waitStatus <= 0 的节点封装的线程去竞争锁
lock()
AQS
当前线程是否持有锁
实线为两种锁
true?
sync = FairSync
挂起线程
false
虚线为非公平锁
ReentrantLock
判断CLH是否还有节点
shouldParkAfterFailedAcquire判断是否挂起当前线程
0 条评论
下一页