首页 > 其他 > 详细

CyclicBarrier

时间:2020-08-27 15:23:31      阅读:66      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/liyasong/p/CyclicBarrier.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!