ReentrantLock 解锁逻辑
2021-12-31 23:36:14 7 举报
ReentrantLock 解锁逻辑
作者其他创作
大纲/内容
不成立
释放 | 解锁成功
头节点后一个LockSupport.unpark(thread);
获取锁成功,将头节点出队
解锁ReentrantLock.unlock()
唤醒同步队列中的线程
尝试释放tryRelease
头节点尝试获取锁
不为0
之前被阻塞的线程将被唤醒
锁是否被释放(free 的值)
未释放的量 = state - 减去当前要释放的量 (重入情况)
将 未释放量 设置会state (state可能为0)
acquireQueued
将free 置为 true, 表示锁释放将 exclusiveOwnerThread 置为空
未释放
解锁失败
同步队列中的线程在等待过程中被取消,被取消的线程节点将会被从同步队列中去除
同步队列是否为空 & 头节点waitStatus 不为0?
未释放的量是否为0,为0表示当前锁释放
已释放
为0
成立
0 条评论
回复 删除
下一页