import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
* @创建人 xiaoshi
* @创建时间 2020/4/4
* @描述 循环栅栏cyclicBarrier的练习:
* 可设置一个数量,当同样数量的线程的调用了await方法后,就可以所有线程同时继续向下执行,相当于给一定数量
* 的线程设置了一个断点,当数量未达到时,阻塞;当数量达到了,所有线程同时继续执行下去
*/
public class cyclicBarrierDemo {
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(5, new Runnable() {
@Override
public void run() {
System.out.println("all start");
}
});
for (int i = 0; i < 5; i++) {
new Thread(new Task(i,cyclicBarrier)).start();
}
}
static class Task implements Runnable{
private CyclicBarrier cyclicBarrier ;
private int i;
public Task(int i, CyclicBarrier c){
this.i = i;
this.cyclicBarrier = c;
}
@Override
public void run() {
try {
System.out.println("thread"+i+" is ready");
cyclicBarrier.await();
System.out.println("thread"+i+" is run");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
}