Search code examples
javamultithreadingcyclicbarrier

What's the number should be the "n" of new CyclicBarrier(n)?


Recently I learned CyclicBarrier, but here's a question:

Code:

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
    }
}

In about code, I wonder that why I must initialize CyclicBarrier by (threadsCount + 1) but not (threadsCount), since I never invoke await() in the main method?


Solution

  • n is the number of parties where new CyclicBarrier(n) creates a new CyclicBarrier that will trip when the given number of parties (threads) are waiting upon it, and does not perform a predefined action upon each barrier.

    I would posit that the origin thread is counted as accessing the barrier, thus when you create 5 new threads, if you didn't wait on 5+1 threads then you'd trip before you were ready.