• CyclicBarrier--栅栏,挡住指定数量线程后一次放行


    CyclicBarrier默认的构造方法是CyclicBarrier(int parties),parties表示栅栏需要拦截的线程数量。

    每个线程调用await方法,计数器减1,减少为0前所有线程都必须等待。

    CyclicBarrier还提供一个更高级的构造函数CyclicBarrier(int parties,Runnable barrier-Action),用于在线程到达屏障时,优先执行barrierAction,方便处理更复杂的业务场景

     1 import java.util.concurrent.BrokenBarrierException;
     2 import java.util.concurrent.CyclicBarrier;
     3 
     4 /**
     5  *
     6  * @author sulishi
     7  * @version 1.0
     8  * @date 2021/1/31
     9  */
    10 public class CyclicBarrierTest2 {
    11     static CyclicBarrier cyclicBarrier = new CyclicBarrier(2, new FirstRun());
    12 
    13     public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
    14         //线程A输出1
    15         new Thread(new Runnable() {
    16             @Override
    17             public void run() {
    18                 try {
    19                     cyclicBarrier.await();
    20                     System.out.println(1);
    21                 }
    22                 catch (Exception e) {
    23                 }
    24             }
    25         }).start();
    26         //主线程输出2
    27         cyclicBarrier.await();
    28         System.out.println(2);
    29     }
    30 
    31     static class FirstRun implements Runnable {
    32         @Override
    33         public void run() {
    34             System.out.println(3);
    35         }
    36     }
    37 }

    输出结果为312 或321,3始终先执行

  • 相关阅读:
    SQLite 的连接串
    输入数组长度大于此表中的列数
    MVC3.0入门学习笔记页面传值ViewData
    MVC3.0入门学习笔记页面传值TempData
    在控制台程序中显示进度
    WCF学习笔记(1) 一个简单的wcf实例
    webBrowser 操作无ID元素
    webBrowser 设置文本框
    cookie总结
    checkbox是否被选择
  • 原文地址:https://www.cnblogs.com/sulishihupan/p/14352447.html
Copyright © 2020-2023  润新知