zoukankan      html  css  js  c++  java
  • 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始终先执行

  • 相关阅读:
    nginx-syslog
    loki
    idea安装中文插件
    nginx虚拟目录alias
    个人 软件系统整理
    Python 遍历Sheet 每个Sheet都单独保存为一个Excel
    SQL Server 多表关联的update语句
    电商 生意参谋 抓取 访客数据 JS版/谷歌插件版
    EF 多表关联
    个人 圈外同学 对比分析
  • 原文地址:https://www.cnblogs.com/sulishihupan/p/14352447.html
Copyright © 2011-2022 走看看