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!
网友评论