并发工具类 CyclicBarrier

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

 

 

 

上一篇:Java正则表达式初学


下一篇:CountDownLatch(减法计数器)-CyclicBarrier(加法计数器)