zoukankan      html  css  js  c++  java
  • CyclicBrrier的简单使用

    背景:有10个同学进行吃瓜大赛,分为两组进行。要求每组内的同学都必须分到瓜以后,裁判喊开始才能进行比赛。

    代码如下:

    @Slf4j
    public class CyclicBarrierDemo {
        private static int peopleNum = 10;
    
        private static CyclicBarrier barrier = new CyclicBarrier(5, () -> {
            log.info("5人小组吃瓜比赛开始。。。");
        });
    
        public static void main(String[] args) throws Exception {
            ExecutorService executorService = Executors.newCachedThreadPool();
            for (int i = 1; i <= peopleNum; i++) {
                int num = i;
                sleep(1000);
                executorService.execute(() -> {
                    try {
                        sleep(1000);
                        log.info("同学{}分到西瓜,等待开始", num);
                        barrier.await();
                        log.info("同学{}吃完西瓜,计时结束", num);
                    } catch (Exception e) {
                        log.error(e.getMessage());
                    }
                });
            }
        }
    }


       结果如下:

     注意两个工具类的区别:

           CountDownLatch: 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。
      CyclicBrrier: N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。

  • 相关阅读:
    vue学习 基本简介,安装,示例,options
    python操作谷歌翻译
    Celery笔记
    nps内网穿透笔记
    初学django基础05 路由系统,django的请求与返回
    初学Django基础04 http|jsonresponse,filter模板过滤器,cvb与fvb
    计数二进制字符串
    字符串相加
    类与对象
    Arrays
  • 原文地址:https://www.cnblogs.com/enchaolee/p/11446867.html
Copyright © 2011-2022 走看看