Java CyclicBarrier应用

Java CyclicBarrier应用
     CyclicBarrier,让多线程齐步走。让多个线程到达某一个点之后,再同时往下运行。
    思考这样一个案例:两个工人从两端挖掘隧道,各自独立奋战,中间不沟通,如果两人在汇合点处碰头了,则表明隧道已经挖通。这描绘的也是在多线程编程中,两个线程独立运行,在没有线程间通信的情况下,如何解决两个线程汇集在同一原点的问题。Java提供了CyclicBarrier(关卡,也有翻译为栅栏)工具类来实现。
    代码如下:
   1   import  java.util.Random;
 2  import java.util.concurrent.CyclicBarrier;
 3  import java.util.concurrent.TimeUnit;
 4 
 5  public  class CyclicBarrierTest {
 6      public  static  void main(String[] args) {
 7          //  设置汇集数量,以及汇集完成后的任务
 8          CyclicBarrier cb =  new CyclicBarrier(2,  new Runnable() {
 9              public  void run() {
10                 System.out.println("隧道已经打通!");
11             }
12         });
13          //  工人1挖隧道
14           new Thread( new Worker(cb), "工人1").start();
15          //  工人2挖隧道
16           new Thread( new Worker(cb), "工人2").start();
17     }
18 
19 
20      static  class Worker  implements Runnable {
21          //  关卡
22           private CyclicBarrier cb;
23 
24          public Worker(CyclicBarrier _cb) {
25             cb = _cb;
26         }
27 
28          public  void run() {
29              try {
30                 TimeUnit.SECONDS.sleep( new Random().nextInt(10));
31                 System.out.println(Thread.currentThread().getName() + "-到达汇合点");
32                  //  到达汇合点
33                  cb.await();
34             }  catch (Exception e) {
35                  //  异常处理
36              }
37         }
38     }
39 }
40 

你可能感兴趣的:(Java CyclicBarrier应用)