CyclicBarrier

java.util.concurrent.CyClicBarrierClass是线程的一种同步机制。它相当于一个栅栏,所有线程必须等待,直到指定数量线程到达。线程才能继续执行下去。

Two threads waiting for each other at CyclicBarriers.


当线程调用Cyclicarrier.await方法时,线程将等待。如果指定数量的线程调用此方法,所有的线程将会释放,然后线程继续执行。

创建 CyclicBarrier

当创建一个CyclicBarrier时,你要指定等待线程的数量N。只有当N个线程等待时(call  await()),所有线程才会释放。

CyclicBarrier barrier = new CyclicBarrier(2);

线程等待

barrier.await();

你也可以指定一个超时时间。线程将会释放,当超时时间到达时。无论是否有N个线程到达。

barrier.await(10, TimeUnit.SECONDS);

等待线程被释放的几个条件

1,最后的一个线程到达(calls await() )

2,线程被其他线程中断 (another thread calls its interrupt() method)

3,等待的其他线程被中断(Another waiting thread is interrupted)

4,其中一个等待线程超时时间到(Another waiting thread times out while waiting at theCyclicBarrier)

5,CyclicBarrier被重置(TheCyclicBarrier.reset())

CyclicBarrier 行为

当构造CyclicBarrier时,你可以指定一个Runnable对象。一旦最后一个线程到达,那么该Runnable将被执行。

Runnable      barrierAction = ... ;

CyclicBarrier barrier      = new CyclicBarrier(2, barrierAction);

CyclicBarrier示例


子线程实现





Main方法



下面是程序执行结果

Thread-0 waiting at barrier 1

Thread-1 waiting at barrier 1

BarrierAction 1 executed

Thread-0 waiting at barrier 2

Thread-1 waiting at barrier 2

BarrierAction 2 executed

Thread-1 done!

Thread-0 done!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容