必威体育Betway必威体育官网
当前位置:首页 > IT技术

CyclicBarrier

时间:2019-10-07 05:45:23来源:IT技术作者:seo实验室小编阅读:74次「手机版」
 

cyclicbarrier

一、CyclicBarrier作用

   它允许一组线程互相等待,直到到达某个公共屏障点。在设计一组固定大小的线程的程序中,这些线程必须不时地相互等待,这时CyclicBarrier很有用。因为该Barrier在释放线程后可以重用,所以称它为循环(Cyclic)的屏障(Barrier)。

二、CyclicBarrier内部实现

   CyclicBarrier的内部是使用重入锁ReentrantLock和Condition。

   1.构造方法CyclicBarrier(int parties)它将在给定数量的线程处于等待状态时启动,但它不会在启动barrier时执行预定义的操作

   2.CyclicBarrier(int parties,Runnable BarrierAction)它将在给定数量的线程处于等待状态时启动,并在启动barrier时执行给定的屏障操作,该操作由最后一个进入barrier的线程执行。

三、await

   让所有线程在barrier调用await方法之前一直等待。内部调用了dowait方法,返回值为剩余等待线程的数量

   await() 不超时等待

   await(long timeout,TimeUnit unit)内部调用dowait(boolean timed,long nanos方法

四、如果该线程不是最后一个到达的线程,会一直处于等待状态除非一下情况

   1.最后一个线程到达,即index==0

   2.超出了等待时间

   3.其他线程终止了当前线程

   4.其他的某个线程中断另一个等待的线程

   5.其他的某个线程在等待barrier超时

   6.其他的某个线程在barrier调用reset方法

五、什么时候抛出BorkenBarrierException异常

   1.如果一个线程处于等待状态时,如果其他线程调用reset方法。

   2.调用的barrier原本就是被破坏的,则抛出brokenBarrierException

   3.任何线程在等待时被中断了,则其他所有线程都将抛出BrokenBarrierException异常,并将Barrier置于损坏状态

六、Generation

   Generarion是CyclicBarrier静态内部类,描述了CyclicBarrier的更新,在CyclicBarrier中,同一批线程属于同一代。当有parties个线程全部达到barrier时,generation就会被更新换代。其中broken属性,表示CyclicBarrier是否处于中断状态

七、BreakBarrier

   当barrier损坏了,或者有一个线程中断了,则通过breakBarrier方法来终止所有的线程。

   代码中将broken标志设为true,并调用signalAll方法,将在CyclicBarrier中处于等待状态的线程全部唤醒

八、nextGeneration

   当index等于0时,会调用nextGeneration方法,进行更新操作

       1.唤醒所有线程

       2.重置count

       3.重置generation

九、reset

   reset方法,充值barrier到初始化的状态

       通过调用breakbarrier和nextGeneration来实现

十、getNumberWait

   用于获取等待的线程数

十一、isBreak

   用于判断CyclicBarrier是否处于中断

相关阅读

CyclicBarrier的工作原理及其实例

CyclicBarrier是多线程中一个重要的类,主要用于线程组内部之间的线程的相互等待问题。 1.CyclicBarrier的工作原理      Cycli

分享到:

栏目导航

推荐阅读

热门阅读