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的数目达到后,所有其它线程被唤醒前被执行。
  • 相关阅读:
    [JavaWeb基础] 001.简单的JavaWeb代码和Tomcat配置部署
    [程序员短壁纸]2015年05月
    [注]什么是用户?估计90%人不知道
    [注]排行榜相关知识
    [注]微信公众号的运营推广总结方案(持续更新)
    [注]6W运营法则教你盘活社区内容运营
    [注]一条牛B的游戏推送要具备哪些条件?
    [微信营销企划之路]001.环境搭建(XAMPP+WeiPHP)
    [Python基础]005.语法(4)
    Java多线程设计模式
  • 原文地址:https://www.cnblogs.com/zedosu/p/6664355.html
Copyright © 2011-2022 走看看