• 浅谈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的数目达到后,所有其它线程被唤醒前被执行。

     

  • 相关阅读:
    微信小程序用vant,dialog弹出框
    小程序太阳码 ,不发布也可以测试
    php ,通过password与salt共同来验证登录
    vscode 使用less开发微信小程序
    php命名规范
    61键 如何打波浪线
    php 循环使用
    记一次,物业费时间交集问题
    Mac拖拽文件
    python 支持中文
  • 原文地址:https://www.cnblogs.com/techyc/p/2957059.html
Copyright © 2020-2023  润新知