AQS共享式获取锁流程
2021-04-16 11:47:59 17 举报
AQS共享式获取锁流程
作者其他创作
大纲/内容
开始
是
调用doReleaseShared进行唤醒后继节点
否(loop)
调用tryAcquireShared尝试获取锁
自旋操作
=0
不为空
获取锁成功并退出
清除取消状态的节点
设置当前节点状态为SIGNAL
ws=SIGNAL
addWaiter
setHeadAndPropagate
判断前置节点状态
添加当前节点到尾部
0
结束
最后一个节点?
判断tail是否为空
否
是(break)
设置当前节点为头结点head
执行完整的添加节点的enq方法(自旋操作)
doAcquireShared
将当前线程包装成一个节点
从挂起的地方继续执行
调用releaseShared方法,从头结点开始唤醒队列中的共享类型节点
CAS操作当前节点成为新的tail
为空
判断当前节点的前置节点是否为头结点head
ws0
当前线程执行挂起操作
如果添加失败
0 条评论
下一页