2

最近学习了CyclicBarrier,但是这里有个问题:

代码:

public class Main {
    public static CyclicBarrier c;

    public static void main(String[] agrs){
        int threadsCount = 5;
        c = new CyclicBarrier(threadsCount + 1);
        // make 5 A threads to run
    }
}

public class A implements Runnable {

    public void run(){
        // do something
       Main.c.await();
        // do something
    }
}

在关于代码中,我想知道为什么我必须通过 (threadsCount + 1) 而不是 (threadsCount) 初始化 CyclicBarrier,因为我从未在 main 方法中调用 await()?

4

2 回答 2

0

nnew CyclicBarrier(n)创建新 CyclicBarrier 的参与方的数量,当给定数量的参与方(线程)正在等待它时,它将跳闸,并且不对每个障碍执行预定义的操作。

我会假设原始线程被视为访问屏障,因此当您创建 5 个新线程时,如果您没有等待5+1线程,那么您会在准备好之前绊倒。

于 2011-03-06T02:50:29.353 回答
0

您必须指定将在 上等待的确切人数CyclicBarrier,如果您指定 n+1,则必须让 n+1 个线程在 上调用 waitCyclicBarrier以使其跳闸。

于 2011-03-06T02:50:54.987 回答