AQS源码分析
2021-01-15 00:13:11 0 举报
AQS源码分析
作者其他创作
大纲/内容
返回该Node
acquire(1)
tryAcquire
acquireQuenced如果是等待队列的第一个节点,尝试获取锁(自旋),并shouldParkAfterFailedAcquire去设置前面节点的waitStatus=-1为睡眠状态,再循环一次后park自己等待唤醒;后面的线程不会尝试获取锁,而是设置前一个结点的waitStatus=-1,并park自己
hasQueuedPredecessors判断是否要排队1.head!=tail(队列为初始化)2.当前线程不是队列第一个排队的线程(第二个节点),前面有线程排队
AQS.state=1
lock
空Node,把当前线程的Node加到head之后
添加到尾部
是
否
addWaiter
队列是否初始化
没有加锁的情况下,即state=0
0 条评论
下一页