屏障同步(输出、增量和等待)
Posted
技术标签:
【中文标题】屏障同步(输出、增量和等待)【英文标题】: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();
如何插入障碍?
【问题讨论】:
【参考方案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,依此类推... 该死,这看起来很简单。非常感谢。以上是关于屏障同步(输出、增量和等待)的主要内容,如果未能解决你的问题,请参考以下文章
concurrent同步屏障 CyclicBarrier & 源码分析
AQS同步组件-CyclicBarrier(循环屏障)解析和用例