侧边栏壁纸
博主头像
xh博主等级

永远是一个学者

  • 累计撰写 15 篇文章
  • 累计创建 6 个标签
  • 累计收到 8 条评论
标签搜索

目 录CONTENT

文章目录

CountDownLatch

xh
xh
2023-03-13 / 0 评论 / 0 点赞 / 143 阅读 / 312 字
温馨提示:
本文最后更新于 2025-02-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. 简介

CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。

应用场景:多线程导入一个Excel文件,希望有一个同步线程一直等待这些线程执行完成,最终再将这些导入结果汇总同步至缓存或者数据库中。


2. 示例

public static void main(String[] args) {
    CountDownLatch countDownLatch = new CountDownLatch(3);

    Thread t1 = new Thread(() -> {
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("[t1线程] 执行完成,耗时2s");
        countDownLatch.countDown();
    });

    Thread t2 = new Thread(() -> {
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("[t2线程] 执行完成,耗时3s");
        countDownLatch.countDown();
    });

    Thread t3 = new Thread(() -> {
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("[t3线程] 执行完成,耗时5s");
        countDownLatch.countDown();
    });

    // 同步线程
    Thread sync = new Thread(() -> {
        try {
            // 开始等待所有线程执行完成
            countDownLatch.await();

            // 所有线程执行完毕,开始将导入结果汇总同步到数据库
            System.out.println("[同步线程] 所有线程执行完毕,开始将导入结果汇总同步到数据库。。。。。。");
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    });

    sync.start();
    t1.start();
    t2.start();
    t3.start();
}


image-20230323122721961

0

评论区