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 CyclicBarr开发者_运维知识库ier(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?
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.
You must specify the exact number of parties that will wait on the CyclicBarrier
, if you specify n+1, then you will have to have n+1 threads invoke wait on the CyclicBarrier
in order for it to trip.
精彩评论