AQS之CyclicBarrier源码
2023-08-22 18:08:53 2 举报
AQS之CyclicBarrier源码
作者其他创作
大纲/内容
waitStatus=-2
lastWaiter
cyclicBarrier.await();
条件队列中的 t1,t2 转移至同步队列
如果构造器有传入,到达栅栏后执行传入的
阻塞之前,释放锁
t3 执行业务,解锁之后唤醒同步队列中的t1、t2获取锁
说明是单向链表
Node node = addConditionWaiter();
final ReentrantLock lock = this.lock;lock.lock();
构建队头
lock.unlock();
firstWaiter
转移具体实现
t2
nextWaiter
thread = t1
t1
重复下一个栅栏
源码分析
构建队尾
thread = t2
状态修改=-1,表示后面的线程可唤醒
入队操作,相同的代码。自旋保证入队一定成功
dowait
如果不是在同步队列中,直接阻塞
t3达到栅栏执行这个方法,见下图
parties用来保存计数副本,计数器重置
t3
使用条件队列阻塞,需要配合独占锁
fullyRelease(node)
0 条评论
下一页