• CyclicBarrier


    CyclicBarrier基本功能

      CyclicBarrier 允许一组线程,全部等待彼此都到达共同的屏障点,然后同时执行下一项操作。在某一个线程未到达之前,这些线程必须彼此等待。等待数量满足parties 值以后,执行CyclicBarrier 构造时设定的方法。也可以不传后续方法,那么等待数量满足后,不执行预定义的操作。

    常用方法

      CyclicBarrier(int parties, Runnable barrierAction) 构造方法。创建一个新的 CyclicBarrier ,当给定数量的线程(线程)等待时,它将跳闸,当屏障跳闸时执行给定的屏障动作,由最后一个进入屏障的线程执行。 

      await()方法。 如果当前线程不是最后一个线程,那么它将进入休眠状态,知道执行await方法的线程到达parties 的数量,或者当前线程被打断。如果当前线程是要到达的最后一个线程,并且在构造函数中提供非空障碍操作,则当前线程在允许其他线程继续之前运行该动作。

      await(long timeout, TimeUnit unit)方法同上,设置一个超时时间,超过时间后,结束等待。抛出TimeoutException

    代码示例

     1     public static void main(String[] args) {
     2         CyclicBarrier barrier = new CyclicBarrier(20,()->{System.out.println("满人发车");});
     3 //        CyclicBarrier barrier = new CyclicBarrier(20, new Runnable() {
     4 //            
     5 //            @Override
     6 //            public void run() {
     7 //                System.out.println("满人发车");
     8 //                
     9 //            }
    10 //        });
    11                 
    12             
    13         for (int i = 0; i < 101; i++) {
    14             new Thread(()->{
    15                 try {
    16 //                    barrier.await(1,TimeUnit.SECONDS);
    17                     barrier.await();
    18                 } catch (Exception e) {
    19                     e.printStackTrace();
    20                 }
    21             }).start();
    22         }
    23     }
    24     
    25     
  • 相关阅读:
    JavaScript的执行
    关于k阶裴波那契序列的两种解法
    科普 eclipse中的Java build
    [BZOJ 1037] 生日聚会Party
    [POJ 1185] 炮兵阵地
    [POJ 1935] Journey
    [POJ 2397] Spiderman
    [POJ 2373][BZOJ 1986] Dividing the Path
    [POJ 3378] Crazy Thairs
    [POJ 2329] Nearest number-2
  • 原文地址:https://www.cnblogs.com/liyasong/p/CyclicBarrier.html
Copyright © 2020-2023  润新知