请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

CyclicBarrier计数器执行的是减1

执行的是减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();
}
}

正在回答 回答被采纳积分+3

1回答

Jimin 2018-11-25 22:07:36

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

0 回复 有任何疑惑可以回复我~
  • 他的问题是课程里面讲的是加1.我刚好也有这个疑问
    回复 有任何疑惑可以回复我~ 2019-03-27 11:08:11
  • 哦,明白你们的疑问点了。是这样的,实际代码里比如CountDownLatch,是通过调用countDown()方法这个-1操作来表达一个线程已经执行完毕,而对于我们学习他的原理而言,每增加这样一个操作,就代表+1个线程完成了操作,10个线程执行过countDown(),对于我们而言,我们看到的是从0加到10个线程执行完毕的,这个的根本在于属于不同视角。
    回复 有任何疑惑可以回复我~ 2019-03-27 23:21:05
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信