线程CountDownLatch使用

CountDownLatch:线程计数器,等待其他线程完成,再执行主线程

CountDownLatch latch = new CountDownLatch(2);//声明一个CountDownLatch,计数器为2

常用方法:

method description
await() 线程被挂起,它会等待直到count值为0才继续执行
await(long timeout, TimeUnit unit) 线程被挂起,设置超时时间,如果到了超时时间count还不为0,则将会继续向下执行,执行主线程
countDown() 讲count计数器做减1操作

应用场景

当我们要做一个2W条的查询,如果单线程运行等待的时间会非常久,这时我们可以考虑运行2个子线线程并行查询,每个子线程查询1W条数据,等子线程查询都结束后,再交由主线程进行汇总处理。

代码如下:

import java.util.concurrent.CountDownLatch;

/**
 * 线程计数器,等待其他线程完成,再执行主线程,例:并发查询
 */
public class CountDownLatchTest {
    public static void main(String[] args) throws InterruptedException {
        final int threadSize = 2;
        CountDownLatch latch = new CountDownLatch(threadSize);
        for (int i =1;i<=threadSize;i++){
            final int x =i;
            new Thread(()->{
                System.out.println("第"+x+"个线程查询,正在运行");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("第"+x+"个线程查询,运行完毕");
                latch.countDown();
            }).start();
        }
        System.out.println("等待所有查询查询完毕");
        latch.await();
        System.out.println("所有查询查询完毕");
        System.out.println("继续执行主线程汇总。。。。。。。");
    }
}

执行结果

等待所有查询查询完毕
第1个线程查询,正在运行
第2个线程查询,正在运行
第1个线程查询,运行完毕
第2个线程查询,运行完毕
所有查询查询完毕
继续执行主线程汇总。。。。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 13,880评论 4 56
  • 下面是我自己收集整理的Java线程相关的面试题,可以用它来好好准备面试。 参考文档:-《Java核心技术 卷一》-...
    阿呆变Geek阅读 15,000评论 14 507
  • Java继承关系初始化顺序 父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父...
    第六象限阅读 6,500评论 0 9
  • 我心目中的好老师应该是一位和蔼可亲的,对孩子严厉的,不乱发脾气的,不放弃任何学生的好老师。
    一明妈妈_9a5a阅读 1,397评论 0 0
  • 外婆,你的安静让这个世界显得聒噪和喧嚣。 你没有让我发现莫扎特、莎士比亚或兰波。你没有带我去看过戏剧或展览,没有社...
    LLYI阅读 1,456评论 0 0