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