Java7并发编程--3.3、CyclicBarrier在集合点同步

        CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环的barrier。
        注意比较CountDownLatch和CyclicBarrier: 
        1. CountDownLatch的作用是允许1或N个线程等待其他线程完成执行;而CyclicBarrier则是允许N个线程相互等待。 

        2. CountDownLatch的计数器无法被重置;CyclicBarrier的计数器可以被重置后使用,因此它被称为是循环的barrier。

        CyclicBarrier使用int初始化,表示在某一点上同步的线程数。当一个线程到达指定点后,它将调用await()方法等待其他线程,当最后一个线程调用CyclicBarrier类的await()方法时,CyclicBarrier对象将唤醒所有在等待的线程,然后这些线程将继续执行。

        CyclicBarrier类还有一个很有意义的改进,即他可以传入另一个Runnable对象作为初始化参数,当所有线程到达集合点之后,CyclicBarrier类将这个Runnable对象作为线程执行。




        CyclicBarrier类还提供了getNumberWaiting()方法和getParties()方法,前者返回在await()上阻塞的线程数目,后者返回被CyclicBarrier对象同步的任务数。

        CyclicBarrier对象的重置通过reset()方法完成,当重置发生后,在await()方法中等待的线程将收到一个BrokenBarrierException异常。

        CyclicBarrier对象有一种特殊的状态即损坏状态(Broken)。当很多线程在await()方法上等待的时候,若其中一个线程被中断,这个线程将抛出InterruptedException异常,其他线程将抛出BrokenBarrierException异常,于是CyclicBarrier对象就处于损坏状态。可以用isBroken()判断是否损坏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值