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?+?"执行完毕..."); ????} }

paypal$10的代金券,选购美国VPS

paypal贝宝可撸$10的代金券!这两天paypal出了活动,本次并没有其他的限制,只要注册国区的paypal,使用国内的手机号和62开头的银联卡,就可以获得10美元的代金券,这个代金券购买产品需要大于10.1美元,站长给大家推荐几个方式,可以白嫖一年的VPS,有需要的朋友可以看看比较简单。PayPal送10美元活动:点击直达活动sfz与绑定卡的号码可以重复用 注册的邮箱,手机号与绑的银联卡必须...

腾讯云新用户省钱秘笈购买云服务器

目前国内云计算市场竞争异常激烈,尤其是国内的腾讯云、阿里云、景安等商家促销活动一波接一波的进行,对于有需要的用户确实得到不小的实惠。但是这样给予国内的主机商确实是比较大的打击,毕竟这些商家的背景和实例强劲,即便是贴本补贴优惠,也是不怕的。前两年阿里一家各种活动促销,确实在国内市场占据主要的市场地位,腾讯云开始两年没有较大的吸引用户,不过这两年的发展还是比较稳健的。我们很多网友在之前肯定也享受到一些...

创梦网络-四川大带宽、镇江电信服务器云服务器低至56元

达州创梦网络怎么样,达州创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,一手四川托管服务商,成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快,直连省骨干,大网封UDP,无视UDP攻击,机房集群高达1.2TB,单机可提供1...

countdownlatch为你推荐
absolute居中absolute与relative怎么区分?求解时间刻度excel横坐标中时间刻度如何设置成整点?最好的翻译网站求最好的翻译网站和软件excel大写金额EXCEL如何显示出汉字大写金额比思论坛永久域名不知道为什么 比思论坛的网站打不开 怎么办呐刷ip流量一天可以刷一万IP流量的软件qq管家官网腾讯手机管家如何下载QQ手机管家?selectintoACCESS中提示“不允许在select into语句中使用多值字段”za是哪个国家的ci是在哪个国家产生的?哪个国家开始流行的怎样删除聊天记录如何删除和一个人的聊天记录?
国外vps 免费动态域名 西安服务器 腾讯云数据库 太原联通测速平台 如何用qq邮箱发邮件 gtt 网游服务器 服务器监测 免费mysql数据库 创建邮箱 申请网站 带宽租赁 我的世界服务器ip 国外网页代理 卡巴斯基官网下载 双11促销 godaddyssl 时间服务器 低价 更多