/**
* @Author zh
* @Description 并发工具类 :可以循环的并发工具类(可以重新计数)
* 1.CycliBarrier 可以指定并发数量
* 2.await():是一个阻塞方法 用来计数
* 3.可以设置一个优先级高的线程 当await达到数量后,优先与其它等待线程执行
* 在创建CyclicBarrier 的时候 构造器指定
* 4.可以循环的:当发生异常的时候,可以进行重置,用来重新循环
*
* 与countDownLauch的区别:
* 1.有优先级的线程
* 2.当发生异常时,可以重置,重新计数并发数
* 3.计数方法不一样:countDown() await();
* @Date 2021/12
public class CycliBarrier2 {
private static ThreadTest t1 =new ThreadTest();
//1.创建 CyclicBarrier 对象的时候,可以指定优先级线程
//private static CyclicBarrier cyclicBarrier =new CyclicBarrier(3);
private static CyclicBarrier cyclicBarrier =new CyclicBarrier(3, t1);
public static void main(String[] args) {
//启动3个线程
for (int i = 0; i < 5; i++) {
Thread t =new Runner1(cyclicBarrier);
t.start();
if (i==2){
t.interrupt();
}
}
}
}
public class Runner1 extends Thread {
private CyclicBarrier cyclicBarrier;
public Runner1(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName()+"准备");
cyclicBarrier.await();//阻塞方法,用来计数
System.out.println(Thread.currentThread().getName()+"跑");
} catch (InterruptedException e) {
cyclicBarrier.reset();//重置方法
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
public class ThreadTest extends Thread {
@Override
public void run() {
System.out.println("我先跑....");
}
}