CountDownLatch:别浪,等人齐再团!(2)

简介: CountDownLatch:别浪,等人齐再团!(2)

CountDownLatch使用


为了实现等待所有线程池执行完之后再执行主线程的逻辑,我决定使用 AQS(AbstractQueuedSynchronizer,抽象同步框架)下的著名类 CountDownLatch 来实现此功能,具体的实现代码如下:


public static void main(String[] args) throws InterruptedException {
    // 创建 CountDownLatch
    CountDownLatch countDownLatch = new CountDownLatch(2);
    // 创建固定线程数的线程池
    ExecutorService executorService = Executors.newFixedThreadPool(2);
    // 任务一
    executorService.submit(new Runnable() {
        @Override
        public void run() {
            // do something
            try {
                // 让此任务执行 1.2s
                Thread.sleep(1200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("我是任务一");
            countDownLatch.countDown();
        }
    });
    // 任务二
    executorService.submit(new Runnable() {
        @Override
        public void run() {
            // do something
            try {
                // 让此任务执行 1.2s
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("我是任务二");
            countDownLatch.countDown();
        }
    });
    // 等待任务执行完成
    countDownLatch.await();
    System.out.println("程序执行完成~");
}


以上程序执行结果如下:


微信图片_20220120171329.jpg


从上述结果可以看出,主线程的执行是等待任务一和任务二都执行完成之后才执行的。

相关文章
|
3月前
|
Java 测试技术
CountDownLatch、CyclicBarrier让线程听我号令
CountDownLatch、CyclicBarrier让线程听我号令
42 0
|
7月前
|
Java BI
CountDownLatch,CyclicBarrier,Semaphore
在开发过程中我们常常遇到需要对多个任务进行汇总,比如报表,或者大屏显示,需要将所有接口的数据都 获取到后再进行汇总,如果使用同步的方式,那么会比较耗时,体验不好,所以我们使用多线程,但是使用多线程 只能异步的执行,有些接口响应比较快,有些比较慢,而返回结果之间又有依赖,这样就无法汇总了, 所以我们引入了CountDownLatch,它能让所有子线程全部执行完毕后主线程才会往下执行,如果子线程没有执行完毕 ,那么主线程将无法继续向下执行。
39 0
|
3月前
CountDownLatch和CyclicBarrier你使用过吗?
CountDownLatch和CyclicBarrier你使用过吗?
25 0
|
8月前
CountDownLatch 使用详解
本文主要对CountDownLatch 的相关知识点进行了介绍和讲解
71 1
|
5月前
CountDownLatch和CyclicBarrier的区别
CountDownLatch和CyclicBarrier的区别
21 0
CountDownLatch和 CyclicBarrier的使用
CountDownLatch和 CyclicBarrier的使用
CountDownLatch、CyclicBarrier的使用(门栓)
CountDownLatch、CyclicBarrier的使用(门栓)
87 0
CountDownLatch&CyclicBarrier&Semaphore
本文将介绍一下CountDownLatch 、 CyclicBarrier 、 Semaphore这几个控制线程的类。
 CountDownLatch&CyclicBarrier&Semaphore
CountDownLatch
CountDownLatch是从JDK1.5开始提供的一个辅助并发编程的一个类,它位于在JUC包中。 允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
116 0
CountDownLatch:别浪,等人齐再团!(3)
CountDownLatch:别浪,等人齐再团!(3)
92 0