CyclicBarrier计数器执行的是减1

来源:6-4 J.U.C之AQS-CyclicBarrier

xuelang139

2018-11-25

执行的是减1操作,不是加1
//源码如下
int index = --count; //减1
if (index == 0) { // tripped
boolean ranAction = false;
try {
final Runnable command = barrierCommand;
if (command != null)
command.run();
ranAction = true;
nextGeneration();
return 0;
} finally {
if (!ranAction)
breakBarrier();
}
}

写回答

1回答

Jimin

2018-11-25

你好,aqs里的同步器基本都是通过减1来计数的,比如CountDownLatch,不知道你这个问题的点是什么。

0
2
Jimin
回复
慕粉13951610073
哦,明白你们的疑问点了。是这样的,实际代码里比如CountDownLatch,是通过调用countDown()方法这个-1操作来表达一个线程已经执行完毕,而对于我们学习他的原理而言,每增加这样一个操作,就代表+1个线程完成了操作,10个线程执行过countDown(),对于我们而言,我们看到的是从0加到10个线程执行完毕的,这个的根本在于属于不同视角。
2019-03-27
共2条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程