countdownlatchjava 如何实现等待子线程结束

countdownlatch  时间:2021-06-16  阅读:()

java并发countdownlatch和cyclicbarrier的区别

cyclibarriar 就是栅栏,顾名思义:就是一个拦截的装置。

多个线程start后,在栅栏处阻塞住,一般定义栅栏的时候会定义有多少个线程。

比如定义为4个,那么有三个线程到栅栏处,就阻塞住,如果没有第四个,就会一直阻塞,知道启动第四个线程到栅栏处,所有的线程开始全部进行工作。

有点像赛马的例子。

所有的赛马一个一个到起点,然后到齐了,在开始跑。

countdownlatch:初始化定义一个数字(整型),比如定义2,一个线程启动后在await处停止下来阻塞,调用一次countDown,会减一,知道countDown后变为0时的时候,线程才会继续进行工作,否则会一直阻塞。

自己写个赛马的程序,其实就什么都懂了。

countdownlatch 进行异步转同步操作,退出时为什么countdown

CountDownLatch 1、类介绍 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

用给定的计数 初始化 CountDownLatch。

由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。

java 如何实现等待子线程结束

有多种实现方式,下面列出两种。

第一种:实现Callable类,使用有返回值的线程,只有线程执行完成后才会返回结果。

import?java.util.ArrayList; import?java.util.List; import?java.util.Random; import?java.util.concurrent.*; public?class?Main?{ ????//?初始化一个容量为10的线程池 ????static?final?ExecutorService?pool?=?Executors.newFixedThreadPool(10); ????public?static?void?main(String[]?args)?throws?ExecutionException,?InterruptedException?{ ????????List<Future<String>>?futures?=?new?ArrayList<>(); ????????for?(int?i?=?0;?i?<?3;?i++)?{ ????????????MyThread?thread?=?new?MyThread("线程"?+?i); ????????????futures.add(pool.submit(thread)); ????????} ????????for?(Future<String>?future?:?futures)?{ ????????????String?name?=?future.get(); ????????????System.out.println(name?+?"执行完成..."); ????????} ????????System.out.println("所有线程执行完成!"); ????} } class?MyThread?implements?Callable<String>?{ ????private?String?name; ????public?MyThread(String?name)?{ ????????this.name?=?name; ????} ????@Override ????public?String?call()?throws?Exception?{ ????????//?TODO?执行业务 ????????//?随机延迟,模拟线程耗时 ????????Thread.sleep(1000?+?new?Random().nextInt(2000)); ????????return?name; ????} }第二种:使用CountDownLatch实现线程计数,代码如下: import?java.util.Random; import?java.util.concurrent.CountDownLatch; import?java.util.concurrent.ExecutionException; import?java.util.concurrent.ExecutorService; import?java.util.concurrent.Executors; public?class?Main2?{ ????//?初始化一个容量为10的线程池 ????static?final?ExecutorService?pool?=?Executors.newFixedThreadPool(10); ????public?static?void?main(String[]?args)?throws?InterruptedException?{ ????????int?threadCount?=?3; ????????//?初始化CountDownLatch,用于线程计数 ????????CountDownLatch?latch?=?new?CountDownLatch(threadCount); ????????for?(int?i?=?0;?i?<?threadCount;?i++)?{ ????????????MyThread?thread?=?new?MyThread("线程"?+?i,?latch); ????????????pool.execute(thread); ????????} ????????//?阻塞当前线程,CountDownLatch计数减为0时表示所有线程都执行完毕,才会释放主线程的阻塞 ????????latch.await(); ????????System.out.println("所有线程执行完成!"); ????} } class?MyThread?implements?Runnable?{ ????private?String?name; ????private?CountDownLatch?latch; ????public?MyThread(String?name,?CountDownLatch?latch)?{ ????????this.name?=?name; ????????this.latch?=?latch; ????} ????@Override ????public?void?run()?{ ????????//?TODO?执行业务 ????????//?随机延迟,模拟线程耗时 ????????try?{ ????????????Thread.sleep(1000?+?new?Random().nextInt(2000)); ????????}?catch?(InterruptedException?e)?{ ????????} ????????//?计数减一 ????????latch.countDown(); ????????System.out.println(name?+?"执行完毕..."); ????} }

萤光云(20元/月),香港CN2国庆特惠

可以看到这次国庆萤光云搞了一个不错的折扣,香港CN2产品6.5折促销,还送50的国庆红包。萤光云是2002年创立的商家,本次国庆活动主推的是香港CN2优化的机器,其另外还有国内BGP和高防服务器。本次活动力度较大,CN2优化套餐低至20/月(需买三个月,用上折扣+代金券组合),有需求的可以看看。官方网站:https://www.lightnode.cn/地区CPU内存SSDIP带宽/流量价格备注购...

gcorelabs:美国GPU服务器,8张RTX2080Ti,2*Silver-4214/256G内存/1T SSD/

gcorelabs提供美国阿什本数据中心的GPU服务器(显卡服务器),默认给8路RTX2080Ti,服务器网卡支持2*10Gbps(ANX),CPU为双路Silver-4214(24核48线程),256G内存,1Gbps独享带宽仅需150欧元、10bps带宽仅需600欧元,不限流量随便跑吧。 官方网站 :https://gcorelabs.com/hosting/dedicated/gpu/ ...

618云上Go:腾讯云秒杀云服务器95元/年起,1C2G5M三年仅288元起

进入6月,各大网络平台都开启了618促销,腾讯云目前也正在开展618云上Go活动,上海/北京/广州/成都/香港/新加坡/硅谷等多个地区云服务器及轻量服务器秒杀,最低年付95元起,参与活动的产品还包括短信包、CDN流量包、MySQL数据库、云存储(标准存储)、直播/点播流量包等等,本轮秒杀活动每天5场,一直持续到7月中旬,感兴趣的朋友可以关注本页。活动页面:https://cloud.tencent...

countdownlatch为你推荐
财务系统软件免费财务软件有哪些?renderpartialrenderHtml和render有什么区别pat是什么格式怎么将自己做的PS图片保存为PAT格式?webservice框架如何用webservice 的cxf框架selectintooracle有select into临时表的用法吗动画分镜头脚本请问什么是动画分镜头脚本,什么是电影分镜头脚本以及什么是广告分镜头脚本?彩信平台目前国内有哪些短信平台服务商,怎么排名?flash序列号求flash的序列号particular教程怎样做ae粒子云效果acceptchangesaltium designer 6.0如何给元件重新编号
北京vps主机 duniu 香港vps99idc fdcservers 好看的桌面背景图 空间服务商 怎么测试下载速度 hostloc 秒杀汇 共享主机 域名接入 免费网页空间 服务器维护 杭州电信宽带优惠 免费网络空间 七十九刀 石家庄服务器 fatcow ping值 服务器是什么 更多