Какой номер должен быть "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
для того, чтобы это поездка.