您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页java之并发工具类屏障(CyclicBarrier )以及CountDownLatch 、Semaphore之间区别

java之并发工具类屏障(CyclicBarrier )以及CountDownLatch 、Semaphore之间区别

来源:测品娱乐

1、CountDownLatch :能够使一个或多个线程等待其他线程完成各自的工作后再执行
2、CyclicBarrier : 让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。
3、Semaphore : 用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理地使用公共资源
4、Exchanger  : 用于线程间协作的工具类


重点:
CountDownLatch和CyclicBarrier可以让线程池执行完后再执行主线程,还有使用并发包下面的Future


2、CyclicBarrier :让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行

功能是:让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障,所有被屏障拦截的线程才会继续执行。
它通过调用await方法让线程进入屏障,每次做加法运算

底层实现:是通过ReentrantLock以及Condition中的await和signal实现  

列子:

public static void main(String[] args) {
    CyclicBarrier cyclicBarrier=new CyclicBarrier(5,()->{
        System.out.println("老板宣布人够了开始开会!!");
    });

    for (int i=1;i<=5;i++){
        new Thread(()->{
            try {
                System.out.println(Thread.currentThread().getName()+"签到!");
                cyclicBarrier.await(); //如果等待的线程数未到,这里将一直等待
                //等线程数够了下面语句将继续执行......
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }
        },"第"+i+"个人").start();
    }

}

打印结果如下:
第1个人签到!
第3个人签到!
第2个人签到!
第5个人签到!
第4个人签到!
老板宣布人够了开始开会!!


因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务