开发者

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜