Condition条件队列
2021-12-09 15:54:02 2 举报
Condition条件队列
作者其他创作
大纲/内容
已经在阻塞队列中
unlinkCancelledWaiters如果最后一个节点已取消,则清除所有已取消节点
signalAll
tryRelease由子类实现
fullyRelease
LockSupport.unpark先给当前线程一个授权,下次调用 prak 时直接跳过
前置节点已取消,或者修改状态失败这唤醒节点的线程 LockSupport.unpark(node.thread);
release把 state 归零
LockSupport.park不在阻塞队列中会一直 park
unparkSuccessor
await
await 超时只是在唤醒是判断如果超时则直接移入阻塞队列
signal
transferForSignal把节点移入阻塞队列
enq把当前节点放入到阻塞队列中,并返回前置节点
while 判断isOnSyncQueue通过waitStatus,next 判断是否在阻塞队列中
条件队列仅仅是一个等待队列,获取锁的流程还是在阻塞队列的流程中,即通过子类实现的方法中。
修改前置节点waitStatus为SIGNAL(-1)
addConditionWaiter添加一个节点到等待队列中
acquireQueued进入阻塞队列获取锁流程
doSignalAll
doSignal
0 条评论
下一页