package function.thread;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestCyclicBarrier {
public static void main(String[] args) {
//带有一个缓冲的线程池
ExecutorService exec = Executors.newCachedThreadPool();
final CyclicBarrier barrier=new CyclicBarrier(4,new Runnable(){
@Override
public void run() {
System.out.println("大家都到齐了,开始开会。。。。。");
}});
for(int i=0;i<4;i++){
exec.execute(new Runnable(){
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName()+" has arrived...");
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
//第一个到达线程不会被计数
System.out.println("到目前为止,有"+barrier.getNumberWaiting()+"个等待者。。。。。。");
barrier.await();//等待。。。。。
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}});
}
exec.shutdown();
}
}
运行结果:
pool-1-thread-1 has arrived...
pool-1-thread-2 has arrived...
pool-1-thread-3 has arrived...
pool-1-thread-4 has arrived...
到目前为止,有0个等待者。。。。。。
到目前为止,有1个等待者。。。。。。
到目前为止,有2个等待者。。。。。。
到目前为止,有3个等待者。。。。。。
大家都到齐了,开始happy去