基于AQS的公平锁
2021-06-05 16:56:46 0 举报
笔记而已
作者其他创作
大纲/内容
t3尝试获取锁,不成功入队
这一步。第二个线程进来尝试获取锁失败后,改造fairSync对象让其head指向一个空的node,让其fail指向当前node。让node的prev指向空的node。让空的node的next指向当前node,线程等待队列构建完成
第三次lock
t1获取锁,第一次不会创建队列
2.tryAcquire(arg)
第一次lock
3.addWaiter(Node.EXCLUSIVE)
第二次lock
enq()
t2尝试获取锁,不成功入队
fairSync
前两步和t2一样,此时进入addWaiter中后不需要在构建等待队列。只需要将各节点的指向维护好就行了,进入acquireQueued中由于其前置队列不是head.没有资格去尝试获取锁。直接去判断前置节点的waitStatus后面就进入了Waiting状态
1. acquire(1);
0 条评论
下一页