Какой номер должен быть «n» нового CyclicBarrier (n)? - PullRequest
2 голосов
/ 06 марта 2011

Недавно я выучил 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
    }
}

Что касается кода, мне интересно, почему я должен инициализировать CyclicBarrier с помощью (threadsCount + 1), а не (threadsCount), поскольку я никогда не вызываю await () в основном методе?

Ответы [ 2 ]

0 голосов
/ 06 марта 2011

Вы должны указать точное число сторон, которые будут ждать на CyclicBarrier, если вы укажете n + 1, то вам нужно будет, чтобы n + 1 нити вызвали ожидание на CyclicBarrier, чтобы он отключился .

0 голосов
/ 06 марта 2011

n - это число сторон, в которых new CyclicBarrier(n) создает новый CyclicBarrier, который будет отключаться, когда определенное число сторон (потоков) ожидает его, и не будет выполнять предварительно определенное действие послекаждый барьер.

Я бы сказал, что исходная нить считается доступной к барьеру, поэтому, когда вы создаете 5 новых нитей, если вы не ожидаете потоков 5+1, вы отключаетесь до того, какготовый.

...