zoukankan      html  css  js  c++  java
  • CyclicBarrier的用法

    CyclicBarrier (加法计数器)

    关闸,当有指定个数线程等待时,开闸,执行每个线程cyclicBarrier.await()后的操作

    例:田径比赛,当所有参赛选手都到入位时(即已有给定数量线程调用cyclicBarrier.await();),开信号枪,所有选手进入比赛(执行各自线程中的任务)

    package juc.add;
    
    import java.util.concurrent.BrokenBarrierException;
    import java.util.concurrent.CyclicBarrier;
    
    /**
     * @Description: juc.add
     * @version: 1.0
     */
    //加法计数器
    public class CyclicBarrierDemo {
        public static void main(String[] args) {
            /*
            田径比赛
             */
            //当给定数量的线程(线程)等待时,它将跳闸,当屏障跳闸时执行给定的屏障动作,由最后一个进入屏障的线程执行。
            CyclicBarrier cyclicBarrier=new CyclicBarrier(7,()->{
                System.out.println("所有参赛选手已准备就绪,比赛开始!");
            });
            for (int i = 1; i <= 7; i++) {
                new Thread(()->{
                    System.out.println(Thread.currentThread().getName()+"号选手准备就绪!");
                    try {
                        cyclicBarrier.await();//等待所有 parties已经在这个障碍上调用了 await 。(让线程阻塞直到有7个线程阻塞于此)
                        System.out.println(Thread.currentThread().getName()+"号选手冲入终点!");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (BrokenBarrierException e) {
                        e.printStackTrace();
                    }
                },String.valueOf(i)).start();
            }
    
        }
    }
    

    运行结果:

  • 相关阅读:
    WPF一步一脚印系列(1):万事起头难
    php设置时区
    关于我的几个博客
    php如何实现页面跳转
    穷人与富人的区别
    如何抓取关键字在百度搜索的排名
    我的博客园开通了
    在Foxmail中出现SSL连接错误应该如何解决
    javascript实现键盘按下回车时触发
    关于网站分页
  • 原文地址:https://www.cnblogs.com/code-xu/p/14292109.html
Copyright © 2011-2022 走看看