如何使用CountDownLatch实现多线程的同步

如何使用CountDownLatch实现多线程的同步

业务需求

  • 一个整体的业务可以分为三个执行逻辑 业务A 业务B和业务C,业务A,B直接没有关联,业务C一定要等业务A和B执行完毕后执行。

图解说明

  • 如下图
    在这里插入图片描述

代码案例

 public static void main(String[] args) throws InterruptedException {
        //创建线程池 线程池 池内有两个线程
        Executor executor = Executors.newFixedThreadPool(2);
        //创建计算器 计算器的默认值为2
        CountDownLatch countDownLatch = new CountDownLatch(2);

        executor.execute(() -> {
            try {
                //模拟执行业务
                Thread.sleep(5000);
                countDownLatch.countDown();
                System.out.println("业务A执行完毕");
            } catch (InterruptedException e) {
            }
        });

        executor.execute(() -> {
            try {
                //模拟执行业务
                Thread.sleep(2000);
                countDownLatch.countDown();
                System.out.println("业务B执行完毕");
            } catch (InterruptedException e) {
            }
        });
        //等待业务1 和 2 都完成
        countDownLatch.await();
        System.out.println("业务A 和 业务 B 都完成了开始执行业务C");
        System.out.println("业务C执行完毕");
        ((ExecutorService) executor).shutdown();
    }
    }

控制台输出:

业务B执行完毕
业务A执行完毕
业务A 和 业务 B 都完成了开始执行业务C
业务C执行完毕
发布了59 篇原创文章 · 获赞 30 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_33249725/article/details/90301642