Java CountDownLatch完成异步回调实例详解

实例代码:
public class AsyncDemo {
private static void doSomeTask() {
System.out.println("Hello World");
}
private static void onCompletion() {
System.out.println("All tasks finished");
}
public static void main(String[] args) {
ExecutorService executor = Executors.newCachedThreadPool();
final CountDownLatch latch = new CountDownLatch(2);
executor.execute(new Task(latch));
executor.execute(new Task(latch));
executor.execute(() -> {
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
onCompletion();
});
executor.shutdown();
}
private static class Task implements Runnable {
/**
* CountDownLatch 是JDK提供的一个简单的线程监测工具
* 基于简单的计数,调用countDown()方法表明当前线程已经终止
* 在监测线程中调用await()方法,该方法会一直挂起直到所有其它线程终止
*/
private final CountDownLatch latch;
public Task(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
try {
doSomeTask();
} catch (Exception e) {
e.printStackTrace();
} finally {
latch.countDown();
}
}
}
}
这里有两点需要补充:
1.如果你是用main方法启动的线程,这种调用方法是没有问题的,JDK会确保所有线程都终止以后main方法才退出。但是如果main方法不是异步任务的启动者(如JUnit,Spring,Tomcat),一旦启动之后laucher将会失去对线程的控制。如在JUnit中laucher提交完任务后就会被认为所有过程已完成,其它线程会被强行终止。
2.正因为如此,请根据环境使用正确的Executor。比如,在web环境中,应该选用tomcat(或Spring)管理的线程池作为Executor,这样才能确保web应用对于异步任务的整个生命周期具有控制权;如果你选用JDK的线程池有什么后果呢?任务也许可以正常执行,当一旦你终止web-app,正在执行的异步线程并不会被正常kill掉,并由此造成内存泄漏或其它不可预见的后果。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Java借助CountDownLatch完成异步回调
# Java
# CountDownLatch回调功能
# Java中使用同步回调和异步回调的示例详解
# Java8通过CompletableFuture实现异步回调
# Java按时间梯度实现异步回调接口的方法
# Java 异步回调机制实例分析
# Java中的异步回调问题
# 有什么
# 就会
# 如果你
# 你是
# 将会
# 希望能
# 谢谢大家
# 或其它
# 如在
# 回调
# 挂起
# 有两点
# 请根据
# 法会
# onCompletion
# tasks
# finished
# println
# World
# final
相关文章:
黑客如何利用漏洞与弱口令入侵网站服务器?
如何在Windows 2008云服务器安全搭建网站?
开源网站制作软件,开源网站什么意思?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建站之星如何一键生成手机站?
如何在局域网内绑定自建网站域名?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
广德云建站网站建设方案与建站流程优化指南
无锡营销型网站制作公司,无锡网选车牌流程?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
太原网站制作公司有哪些,网约车营运证查询官网?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何使用Golang安装API文档生成工具_快速生成接口文档
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
外贸公司网站制作哪家好,maersk船公司官网?
python的本地网站制作,如何创建本地站点?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
独立制作一个网站多少钱,建立网站需要花多少钱?
智能起名网站制作软件有哪些,制作logo的软件?
焦点电影公司作品,电影焦点结局是什么?
制作网站外包平台,自动化接单网站有哪些?
,想在网上投简历,哪几个网站比较好?
贸易公司网站制作流程,出口贸易网站设计怎么做?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
建站与域名管理如何高效结合?
网站制作软件有哪些,制图软件有哪些?
建站主机如何选?高性价比方案全解析
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
图册素材网站设计制作软件,图册的导出方式有几种?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何撰写建站申请书?关键要点有哪些?
山东云建站价格为何差异显著?
孙琪峥织梦建站教程如何优化数据库安全?
c# await 一个已经完成的Task会发生什么
PHP 500报错的快速解决方法
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何用虚拟主机快速搭建网站?详细步骤解析
如何通过虚拟机搭建网站?详细步骤解析
打鱼网站制作软件,波克捕鱼官方号怎么注册?
中山网站推广排名,中山信息港登录入口?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
网站制作网站,深圳做网站哪家比较好?
如何解决ASP生成WAP建站中文乱码问题?
Python文件管理规范_工程实践说明【指导】
家具网站制作软件,家具厂怎么跑业务?
全景视频制作网站有哪些,全景图怎么做成网页?
*请认真填写需求信息,我们会在24小时内与您取得联系。