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

    CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。

    用法略有不同,测试代码如下:

    复制代码
     1 public class TestCyclicBarrier {
     2 
     3     private static final int THREAD_NUM = 5;
     4     
     5     public static class WorkerThread implements Runnable{
     6 
     7         CyclicBarrier barrier;
     8         
     9         public WorkerThread(CyclicBarrier b){
    10             this.barrier = b;
    11         }
    12         
    13         @Override
    14         public void run() {
    15             // TODO Auto-generated method stub
    16             try{
    17                 System.out.println("Worker's waiting");
    18                 //线程在这里等待,直到所有线程都到达barrier。
    19                 barrier.await();
    20                 System.out.println("ID:"+Thread.currentThread().getId()+" Working");
    21             }catch(Exception e){
    22                 e.printStackTrace();
    23             }
    24         }
    25         
    26     }
    27     
    28     /**
    29      * @param args
    30      */
    31     public static void main(String[] args) {
    32         // TODO Auto-generated method stub
    33         CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() {
    34             //当所有线程到达barrier时执行
    35             @Override
    36             public void run() {
    37                 // TODO Auto-generated method stub
    38                 System.out.println("Inside Barrier");
    39                 
    40             }
    41         });
    42         
    43         for(int i=0;i<THREAD_NUM;i++){
    44             new Thread(new WorkerThread(cb)).start();
    45         }
    46     }
    47 
    48 }
    49 /*
    50 以下是输出:
    51 Worker's waiting
    52 Worker's waiting
    53 Worker's waiting
    54 Worker's waiting
    55 Worker's waiting
    56 Inside Barrier
    57 ID:12 Working
    58 ID:8 Working
    59 ID:11 Working
    60 ID:9 Working
    61 ID:10 Working
    62 */
    复制代码
    1.  CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。 
    2.  CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。 
    3.  CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。
  • 相关阅读:
    使用环信WebIm实现一个客服功能
    html中的下拉框—select和input方式
    [LeetCode] 206. Reverse Linked List
    visual studio 2019安装配置可编写c/c++语言的IDE环境
    JS判断数据类型是不是undefined
    idea微服务架构出现 Run Dashboard 按钮方法
    docker 常用命令
    配置docker镜像加速
    linux安装docker
    linux安装redis
  • 原文地址:https://www.cnblogs.com/zedosu/p/6664355.html
Copyright © 2011-2022 走看看