AQS
2021-05-09 22:05:30 0 举报
fdsfdsf
作者其他创作
大纲/内容
自旋一次(p == head && tryAcquire(arg))
实例化虚拟节点Node
持有
加锁
实例化一个Node
有
判断锁状态(tryAcquire)
T2将哨兵节点WS设置为-1,前一个ws记录是后一个状态,(一个睡着的人无法叫醒自己)
队列中只有一个元素
实例化当前线程Node(T2)
只有第一个节点才会做这次自旋!!这里的自旋,理解为,做完上面动作后,判断自己是否需要排队,如果需要,继续排队,如果不需要,持有锁hasQueuedPredecessors
入队(addWaiter)
前提:T1持有锁,但未释放
acquireQueued
是
无
维护虚拟节点和T2的关系
park阻塞
是否需要排队
T2
自旋一次(shouldParkAfterFailedAcquire)
0 条评论
回复 删除
下一页