Какой номер должен быть "n" нового CyclicBarrier(n)?

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

Решение

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

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

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

Другие вопросы по тегам