CyclicBarrier

CyclicBarrier基本功能

  CyclicBarrier 允许一组线程,全部等待彼此都到达共同的屏障点,然后同时执行下一项操作。在某一个线程未到达之前,这些线程必须彼此等待。等待数量满足parties 值以后,执行CyclicBarrier 构造时设定的方法。也可以不传后续方法,那么等待数量满足后,不执行预定义的操作。

常用方法

  CyclicBarrier(int parties, Runnable barrierAction) 构造方法。创建一个新的 CyclicBarrier ,当给定数量的线程(线程)等待时,它将跳闸,当屏障跳闸时执行给定的屏障动作,由最后一个进入屏障的线程执行。 

  await()方法。 如果当前线程不是最后一个线程,那么它将进入休眠状态,知道执行await方法的线程到达parties 的数量,或者当前线程被打断。如果当前线程是要到达的最后一个线程,并且在构造函数中提供非空障碍操作,则当前线程在允许其他线程继续之前运行该动作。

  await(long timeout, TimeUnit unit)方法同上,设置一个超时时间,超过时间后,结束等待。抛出TimeoutException

代码示例

 

 1     public static void main(String[] args) {
 2         CyclicBarrier barrier = new CyclicBarrier(20,()->{System.out.println("满人发车");});
 3 //        CyclicBarrier barrier = new CyclicBarrier(20, new Runnable() {
 4 //            
 5 //            @Override
 6 //            public void run() {
 7 //                System.out.println("满人发车");
 8 //                
 9 //            }
10 //        });
11                 
12             
13         for (int i = 0; i < 101; i++) {
14             new Thread(()->{
15                 try {
16 //                    barrier.await(1,TimeUnit.SECONDS);
17                     barrier.await();
18                 } catch (Exception e) {
19                     e.printStackTrace();
20                 }
21             }).start();
22         }
23     }
24     
25     

 

上一篇:CyclicBarrier使用详解及源码解读


下一篇:也谈ARM内存一致性