Синхронизация барьера (вывод, приращение и ожидание) - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу, чтобы синхронизированные потоки ждали друг друга.В примере программы каждый поток просто считает до 100. Я хочу, чтобы потоки ждали каждые 10 выходов.

Поскольку я готовлюсь к экзамену, я хотел бы использовать метод CyclicBarrier .

Вот код:

public class NumberRunner extends Thread {

    private int number;

    private CyclicBarrier barrier;

    public NumberRunner(int n, CyclicBarrier b) {
        number = n;
        barrier = b;
    }

    public void run() {

        for (int i = 0; i < 100; i++) {

            System.out.println("Thread " + number + ": " + i);
        }

    }

иГлавный класс

public class Barriers {

    private final static int NUMBER = 3;

    public static void main(String[] args) {

        CyclicBarrier barrier = new CyclicBarrier(3);

        NumberRunner[] runner = new NumberRunner[NUMBER];
        for (int i = 0; i < NUMBER; i++) {
            runner[i] = new NumberRunner(i, barrier);
        }
        for (int i = 0; i < NUMBER; i++) {
            runner[i].start();
        }
    }

Как мне вставить барьеры?

1 Ответ

1 голос
/ 25 сентября 2019
for (int i = 0; i < 100; i++) {
    System.out.println("Thread " + number + ": " + i);
    if ((i + 1) % 10 == 0) {
        try {
            barrier.await();
        } catch () {}//whatever exceptions b.await() throws
    }   
}
...