这个数字应该是新的CyclicBarrier(n)的“n”是多少?

时间:2011-03-06 02:44:15

标签: java multithreading cyclicbarrier

最近我学习了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()?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您必须指定将在CyclicBarrier上等待的确切参与方数,如果您指定n + 1,则必须有n + 1个线程按顺序在CyclicBarrier上调用等待为了它的旅行。