CyclicBarrier(int parties, Runnable barrierAction) 详解

xiaoxiao2021-02-27  336

CyclicBarrier(int parties, Runnable barrierAction)  :创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,并在启动 barrier 时执行给定的屏障操作,该操作由最后一个进入 barrier 的线程执行。

为了进行说明,我们使用下面的例子:

import java.util.concurrent.CyclicBarrier; public class CyclicBarrierTest2 { static CyclicBarrier c = new CyclicBarrier(2, new A()); public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { try { System.out.println("子:"+Thread.currentThread().toString()); c.await(); } catch (Exception e) { } System.out.println(1); } },"子线程").start(); try { System.out.println("主:"+Thread.currentThread().toString()); c.await(); } catch (Exception e) { } System.out.println(2); } static class A implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().toString()); System.out.println(3); } } } 测试结果如下:

主:Thread[main,5,main] 子:Thread[子线程,5,main] Thread[子线程,5,main] 3 1 2 或者

子:Thread[子线程,5,main] 主:Thread[main,5,main] Thread[main,5,main] 3 2 1测试结果说明,任务 barrierAction确实由最后一个到达屏障的线程进行执行,并且执行完了之后该线程会继续从自己当初await的地方再次开始执行。

转载请注明原文地址: https://www.6miu.com/read-2322.html

最新回复(0)