全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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小时内与您取得联系。