AQS基本流程
2020-02-19 15:47:09 0 举报
登录查看完整内容
AQS执行流程图
作者其他创作
大纲/内容
从尾至头遍历状态非CANCELED的node,找到头结点(head.next),将其唤醒
阻塞当前节点,唤醒其前驱节点,并取消当前节点获取锁的请求
线程
执行release()
进行后续操作,代码块执行完成后,通过release() 释放锁(注意:此时,当前线程并未进入等待队列,不用进行自旋获取锁的操作)
否
是
将当前节点作为head节点(虚拟节点,不挂载线程),并将原来的head节点移出队列,继续执行被锁住的代码块
当前节点成功自旋获取锁?
获取锁成功?
通过addWaiter()将线程追加到等待队列中,并通过acquireQueued()进行自旋获取锁操作
共享资源标志,state=0时,表示共享资源当前没有被其他线程占有;state不为0时,表示共享资源已被其他线程占有
0 条评论
回复 删除
下一页