AQS共享锁流程
2019-12-30 10:01:53 0 举报
AQS共享锁流程
作者其他创作
大纲/内容
false
前置节点的waitStatus
唤醒后续节点
true
ws 0
shouldParkAfterFailedAcquire
前驱节点被取消了,向前遍历,直到找到没有被取消的前驱节点,设置自己的前驱节点为该节点
前置节点是head
compareAndSetHeadcompareAndSetTail
获取到锁setHeadAndPropagate
ws = 0 or PROPAGATE
acquireShared
ws = Node.SIGNAL
tail != null
获取到锁结束
compareAndSetTail
返回值小于0
将前驱节点的waitStatus设置成SIGNAL
加入同步队列
新建一个node节点保存当前Thread
再次尝试获取锁tryAcquireShared
返回值 >= 0
setHead
parkAndCheckInterrupt(线程被阻塞)
addWaiter
AQS共享锁流程 by:蒋森
doAcquireShared
tryAcquireShared
0 条评论
下一页