CountDownLatch,简洁的线程阻塞工具类

一、简介CountDownLatch

    多线程开发经常出现的情况:开启一定数量的子线程执行批量任务,主线程后续的操作依赖于子线程执行产生的结果,这种情况就需要主线程等待子线程执行完毕,然后主线程默认与子线程异步,此时就需要使用到线程同步工具类了

    thread.join()可以保证在当前线程执行结束前为主线程加锁,但jdk1.5出现java.util.concurrent出现后,线程池中的线程不能被直接引用了,这里使用java.util.concurrent.CountDownLatch也更加方便。

二、CountDownLatch使用的场景可以说特别多,举个我们应用中使用的场景:

    后台订单列表加载搜索时,多线程根据id加载订单的所有相关属性,每个线程处理500个订单,处理订单后需要封装返回前台,所以需要等待所有订单加载完成后才能封装返回前台的对象,这个时候根据我们创建的订单数来初始化CountDownLatch

    

CountDownLatch latch = new CountDownLatch(threadCount);

创建线程时传入并且最终执行countDown方法减1,知道最终减为0,才会放行主线程

依赖于

latch.await();

三、其他情况,如果我们初始化的CountDownLatch(threadCount) threadCount数量大于当前子线程数量最终没有减到0,那么 latch.await() 便会一直处于等待状态。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值