package com.zcw.demo1;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
* @ClassName : MyCyclicBarrierBeginDemo
* @Description : 实验将要实现所有线程都达到同步点时再继续运行的效果
* @Author : Zhaocunwei
* @Date: 2020-04-18 09:35
*/
public class MyCyclicBarrierBeginDemo extends Thread{
private CyclicBarrier cyclicBarrier;
public MyCyclicBarrierBeginDemo(CyclicBarrier cyclicBarrier){
super();
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run(){
try {
Thread.sleep((int)(Math.random()*1000));
System.out.println(Thread.currentThread().getName()+"到了!"+System.currentTimeMillis());
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(5,new Runnable(){
@Override
public void run() {
System.out.println("全都到了!");
}
});
MyCyclicBarrierBeginDemo[] threadArray = new MyCyclicBarrierBeginDemo[5];
for(int i=0;i<threadArray.length;i++){
threadArray[i] = new MyCyclicBarrierBeginDemo(cyclicBarrier);
}
for(int i=0;i<threadArray.length;i++){
threadArray[i].start();
}
}
}
Resultado de la operación: