package book.test;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarriercDemo {
static CyclicBarrier cyclicBarrier=new CyclicBarrier(5,new A());
public static void main(String[] args) throws InterruptedException, BrokenBarrierException {
for (int i = 0; i < 5; i++) {
new Thread(new B(i)).start();
}
// System.out.println("总汇报工作");
}
public static class A implements Runnable{
@Override
public void run() {
System.out.println("到达了门阀");
}
}
public static class B implements Runnable{
int value;
public B(int value) {
this.value = value;
}
@Override
public void run() {
try {
// Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+":等待其他线程就绪。。。");
cyclicBarrier.await();
System.out.println(Thread.currentThread().getName()+":开始工作"+value);
cyclicBarrier.await();
System.out.println(Thread.currentThread().getName()+":正在工作中..."+value);
Thread.sleep(1000);
cyclicBarrier.await();
System.out.println(Thread.currentThread().getName()+":执行完毕"+value);
cyclicBarrier.await();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
运行结果:
Thread-0:等待其他线程就绪。。。
Thread-1:等待其他线程就绪。。。
Thread-3:等待其他线程就绪。。。
Thread-4:等待其他线程就绪。。。
Thread-2:等待其他线程就绪。。。
到达了门阀
Thread-2:开始工作2
Thread-1:开始工作1
Thread-0:开始工作0
Thread-4:开始工作4
Thread-3:开始工作3
到达了门阀
Thread-3:正在工作中...3
Thread-4:正在工作中...4
Thread-0:正在工作中...0
Thread-1:正在工作中...1
Thread-2:正在工作中...2
到达了门阀
Thread-0:执行完毕0
Thread-3:执行完毕3
Thread-4:执行完毕4
Thread-2:执行完毕2
Thread-1:执行完毕1
到达了门阀