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

コードについてですが、メイン メソッドで await() を呼び出したことがないのに、(threadsCount) ではなく (threadsCount + 1) で CyclicBarrier を初期化する必要があるのはなぜでしょうか。

4

2 に答える 2

0

nnew CyclicBarrier(n)指定された数のパーティ (スレッド) が待機しているときにトリップする新しい CyclicBarrier を作成するパーティの数であり、各バリアに対して事前定義されたアクションを実行しません。

元のスレッドはバリアにアクセスするものとしてカウントされるため、5 つの新しいスレッドを作成すると、スレッドを待機しなかった場合、5+1準備が整う前にトリップします。

于 2011-03-06T02:50:29.353 に答える
0

で待機するパーティの正確な数を指定する必要がありCyclicBarrierます。n+1 を指定した場合、n+1 スレッドが で待機を呼び出す必要がありますCyclicBarrier

于 2011-03-06T02:50:54.987 に答える