/** * @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("我先跑...."); } }