定义介绍:允许一组线程全部等待彼此达到共同屏障点的同步辅助。循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。屏障被称为循环 ,因为它可以在等待的线程被释放之后重新使用。
A CyclicBarrier支持一个可选的Runnable命令,每个屏障点运行一次,在派对中的最后一个线程到达之后,但在任何线程释放之前。 在任何一方继续进行之前,此屏障 *** 作对更新共享状态很有用。
构造方法:
创建一个新的 CyclicBarrier ,当给定数量的线程(线程)等待它时,它将跳闸,并且当屏障跳闸时不执行预定义的动作。
创建一个新的 CyclicBarrier ,当给定数量的线程(线程)等待时,它将跳闸,当屏障跳闸时执行给定的屏障动作,由最后一个进入屏障的线程执行。
所有方法接口方法具体的方法
等待所有 parties已经在这个障碍上调用了 await 。
等待所有 parties已经在此屏障上调用 await ,或指定的等待时间过去。
返回目前正在等待障碍的各方的数量。
返回旅行这个障碍所需的聚会数量。
查询这个障碍是否处于破碎状态。
将屏障重置为初始状态。
代码示例:
@Test public void test01(){ CyclicBarrier cyclicBarrier=new CyclicBarrier(7,()->{ System.out.println("召集龙珠"); //等到cyclicBarrier 七次时候执行 }); for(int i=1;i<8;i++) { final int tmp=i; new Thread(() -> { System.out.println("第"+tmp+"颗龙珠"); try { TimeUnit.SECONDS.sleep(2); cyclicBarrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } }).start(); } System.out.println("等待的数量1:"+cyclicBarrier.getNumberWaiting()); System.out.println("状态1:"+ cyclicBarrier.isBroken()); }
CyclicBarrier 与 CountDownLatch 区别 很明显 ,一个是倒减 ,倒减完后可以再往下执行,另一个是阻塞,阻塞到一定限制再一起执行,另外CyclicBarrier 可以重置,而CountDownLatch 不可以。
接下来:Semaphore 辅助类
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)