【问题标题】:Barrier Synchronization (Output, increment and wait)屏障同步(输出、增量和等待)
【发布时间】:2020-01-25 18:53:42
【问题描述】:

我想让同步线程互相等待。在示例程序中,每个线程最多计数为 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();
        }
    }

如何插入障碍?

【问题讨论】:

    标签: java multithreading synchronization barrier cyclicbarrier


    【解决方案1】:
    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
        }   
    }
    

    【讨论】:

    • 很抱歉,这不是我想要的方式。我希望每个线程运行到 10,然后等到其他线程运行到 10,依此类推...
    • 该死,这看起来很简单。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2015-03-09
    • 1970-01-01
    • 2018-12-07
    • 2019-03-21
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多