首页 > Java > Java如何使用 ExecutorService 等待所有线程完成?

Java如何使用 ExecutorService 等待所有线程完成?

上一篇 下一篇

我需要一次执行 4 个任务,如下所示:

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
    taskExecutor.execute(new MyTask());
}
//...wait for completion somehow

完成所有这些操作后,我如何获得通知?现在,我想不出有什么比设置一些全局任务计数器并在每个任务结束时减少它更好的了,然后在无限循环中监视该计数器变为 0;或获取期货列表,并在无限循环监视器中完成所有这些期货。不涉及无限循环的更好解决方案是什么?

谢谢。

分割线

网友回答:

基本上在你打电话,然后:ExecutorServiceshutdown()awaitTermination()

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
  taskExecutor.execute(new MyTask());
}
taskExecutor.shutdown();
try {
  taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
  ...
}

分割线

网友回答:

使用倒计时闩锁:

CountDownLatch latch = new CountDownLatch(totalNumberOfTasks);
ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
  taskExecutor.execute(new MyTask());
}

try {
  latch.await();
} catch (InterruptedException E) {
   // handle
}

并在您的任务中(附在尝试/最后)

latch.countDown();

分割线

网友回答:

ExecutorService.invokeAll()为你做。

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
List<Callable<?>> tasks; // your tasks
// invokeAll() returns when all tasks are complete
List<Future<?>> futures = taskExecutor.invokeAll(tasks);

模板简介:该模板名称为【Java如何使用 ExecutorService 等待所有线程完成?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 355次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-19
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信图片 html5 企业网站 响应式 单页式简历模板 微信模板 微信公众平台 微信素材 自适应 微信文章
您可能会喜欢的其他模板