做网站本溪,dede网站建设流程,网站建设需要的硬件,家纺营销型网站Cyclic是周期的意思#xff0c;Barrier是关卡的意思。CyclicBarrier不仅有CountDownLatch的功能#xff0c;还可以实现屏障等待#xff0c;即阶段性同步。因此适用于#xff0c;需要循环地实现线程一起做任务的目标。CyclicBarrier允许一组线程相互等待#xff0c;直到到达…Cyclic是周期的意思Barrier是关卡的意思。CyclicBarrier不仅有CountDownLatch的功能还可以实现屏障等待即阶段性同步。因此适用于需要循环地实现线程一起做任务的目标。CyclicBarrier允许一组线程相互等待直到到达某个公共屏障点如果某些进程需要实时地相互等待就可以使用CyclicBarrier。CyclicBarrier的重点在于任何一个线程没有完成任务其他所有的线程都必须等待即同类相互等待。CyclicBarrier的计数是加法操作。new CyclicBarrier(5, newRunnable())设置最大为5个同行者当线程个数等于同行者数目时即只有5个线程则5个线程都执行了cbRef的await()方法后才会走到run()方法内然后每个方法再各自继续执行。否则这些线程彼此相互等待一直阻塞。当线程个数大于partier(同行者)数量时凑齐同行者数量个线程的await后就会走到run方法内凑齐的方法也会各自继续执行。之后再次凑齐会再执行一遍run方法各自继续执行。从而实现分批进行。当循环执行时到达屏障点一同执行的线程组合是可能是随机的。CyclicBarrier具有屏障重置性。当凑齐同行者数目后使用getNumberWaiting()方法可以看到等待数量变为0.再来一个同行者等待数目就会变成n-1。isBroken()方法查询此屏障是否处于损坏状态。如果其中一个进程因为出现异常而中断不会影响其他进程的执行和等待但是如果用Thread的interrupt()方法进行中断则所有的线程都会抛出BrokenBarrierException异常。也就是说CyclicBarrier类对现成的中断处理会使用全有、或者全无的破坏模型。即有一个线程因为超时或中断提前离开了屏障点其他所有在屏障点等待的线程也会抛出异常并离开屏障点。await(long timeout,TimeUnit unit)如果在指定时间内达到parties的数量则继续运行否则抛出超时异常。getParties()屏障对象的parties个数。getNumberWaiting()在屏障处等待的线程个数。reset()重置屏障。屏障被重置后如果有线程在等待parties会出现Broken异常。示例代码https://github.com/whitefancy/OJproblems/tree/master/javaconcurrent/cyclicbarrier参考文档《Java并发编程核心方法与框架》(高洪岩)