了解所有线程何时完成并处理异常

2024-02-25

我正在使用 Executor 框架使用线程池(即 newFixedThreadPool)启动多个线程。我使用 threadpool.submit(aThread) 提交要由线程池执行的作业,这工作正常,但是我需要确定所有线程何时完成,以便我可以继续进行其他处理。我研究了使用 Future.get() ,它会阻塞直到线程完成,这里的问题是它会阻塞直到有结果可用。我还考虑了使用连续调用 isTermminate() 方法,然后在发出关闭命令后进行睡眠,以检查所有线程是否已完成,但这对我来说似乎并不整洁。还有另一种更清洁的方法吗?此外,如果任何一个线程中出现异常,我希望能够终止所有其他正在运行的线程,并阻止池中任何排队的线程启动。做到这一点的最佳机制是什么?

期待听到您的回复

TIA


Use ExecutorService#shutdown() http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html#shutdown%28%29进而ExecutorService#awaitTermination() http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html#awaitTermination%28long,%20java.util.concurrent.TimeUnit%29

例如:

ExecutorService service = Executors.newCachedThreadPool();
service.submit(...);
service.submit(...);
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);

// All tasks have now finished

当任务因异常而失败时通知您。您必须提供线程工厂 http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.htmlExecutorService 为它创建的每个线程设置一个“未捕获的异常处理程序”。然后,该异常处理程序可以终止正在运行的任务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解所有线程何时完成并处理异常 的相关文章

随机推荐

  • 该方法必须重写超类方法

    最近我将计算机更新到 Ubuntu 11 10 64 位 我在导入项目时遇到问题 它给了我一个错误 方法 onView 必须重写超类方法 我在其他一些帖子中读到错误应该是使用java 1 5 但是Ubuntu 11 10附带了open 6
  • Laravel 核心方法混乱

    我一直在挖掘 Laravel 的核心 因为我想了解它是如何工作的 但我想出了一个方法 即使三天后我也无法理解 在 start php 中 应用程序与其自身绑定 到目前为止 一切都很好 但是当我检查 app gt share 方法时我迷失了
  • 将函数应用于数据框中的每一列,观察每列现有的数据类型

    我正在尝试获取大数据框中每列的最小值 最大值 作为了解我的数据 我的第一次尝试是 apply t 2 max na rm 1 它将所有内容视为字符向量 因为前几列是字符类型 所以一些数字列的最大值是 99 5 然后我尝试了这个 sapply
  • SQL 聚合函数别名

    我是 SQL 初学者 这是我被要求解决的问题 假设大城市被定义为place类型的city人口为 至少100 000 编写返回方案的 SQL 查询 state name no big city big city population 订购st
  • 无法使用 SES 接收 S3 存储桶中的电子邮件

    我正在尝试创建一个系统 其中电子邮件将发送到我公司的邮箱 并且 S3 存储桶将存储这些电子邮件 每当存储新电子邮件时 都会触发 Lambda 函数来存储电子邮件并回复发件人 第二部分 然而 我没有成功地实现第一部分 我有一个托管在 AWS
  • 在 Web API 控制器中接收 Json 反序列化对象作为字符串

    以下是我从 Ui 输入的 Json data Id 1 Id 2 Id 3 我可以在如下所示的对象结构中没有问题地接收它 public class TestController ApiController
  • 动态生成角度为2的输入字段类型并设置字段的类型

    我是 Angular 2 的新手 尝试根据使用 Angular 2 的模型动态生成一堆输入字段 有些字段是密码字段 如果是的话 我想让输入字段输入密码 我写过这样的东西 div div
  • 引用主题的原色而不是 Material UI 中的特定颜色

    使用 ReactJS 和 Material UI 我有一个项目 其中我更改了主题颜色 const newTheme getMuiTheme fontFamily Roboto sans serif palette primary1Color
  • Angular 2 和 Spring Boot - 部署到战争

    首先我要说的是 我是 Maven Spring 的新手 并且很难弄清楚当我的目录不遵循首选 Maven 结构时该怎么做 我按照说明通过 Angular 2 和 Spring Boot 设置项目tutorial https blog jdri
  • 具有多个 IN 参数的存储过程

    我得到了以下程序 create or replace PROCEDURE create indexes tbl name index IN VARCHAR2 tbl name vehicle IN VARCHAR2 tbl name dea
  • 检查 gRpc 服务器是否在 C# 中运行

    我正在用 C 编写一个 gRpc 服务器 如果服务器因任何原因关闭 我想添加自动恢复 重试实现 经过研究 我遇到了拦截器并感到兴奋 但看起来它只支持 Go 我找不到 gRpc C 的任何类似内容 如何在 gRpc CSharp 中处理自动恢
  • 在 Angular 中下载文件时无法获取进度和文件

    我有一个 Angular 应用程序 我只想下载一个文件 到目前为止 这是我的代码 this fileNavigationService downloadFile element subscribe result gt this genera
  • GCP 中的 AI Notebook 和 Cloud Datalab 有什么区别?

    我已经搜索了这个问题的答案 这个问题是重复的 但我需要澄清 因为我看了两个不同的地方 答案有点相反 以下堆栈溢出answer https stackoverflow com a 58329351 9146820提到Google Cloud
  • QT5文本渲染问题

    我在基于 MIPS 的平台上交叉编译了 QT5 每当我运行包括示例应用程序 其中包含文本 的应用程序时 它首先绘制文本 然后使用文本颜色的 矩形 填充来绘制文本区域 所以最后我在所有显示文本的地方看到了一个黑色矩形 如果我改变文本颜色 矩形
  • 词汇环境和函数范围

    javascript 中的词法环境和作用域是一回事吗 根据我刚刚从 JavaScript Ninja 的秘密 2 e 中学到的内容给出答案 它们是不同的概念但相关 我们需要定义一个相关的概念 执行上下文及其堆栈去理解 执行上下文 执行上下文
  • Next.js:如何使动态路由与空间一起工作?

    我有一个getStaticPaths生成两条几乎相同的路径的函数 foo 20bar and foo bar My foo bar路径效果很好 但由于某种原因foo 20bar路径不起作用 它会路由到我的 404 页面 无论我是否真的浏览到
  • 如何使用 DynamoDBAutoGenerateKey 为我提供自动生成的密钥?

    我需要使用 AWS SDK 中的 DynamoDBAutoGenerateKey 来为我提供一个随机密钥 字符串类型 然后我可以用它来执行某些操作 我在网上找不到任何这样做的例子 虽然看起来应该相对简单 但我真的很难让它发挥作用 任何人都可
  • 像模板一样保存多个 CKEditor 内联编辑器字段的数据

    我正在建立一个模板系统 设计人员可以在其中提交 HTML5 设计并允许用户添加自己的内容 我正在为该应用程序使用 CKEditor 4 2 和 Rails 3 我希望用户能够加载模板页面 然后直接编辑各种内联编辑器 然后通过 JS 和 Aj
  • C# WPF ComboBox - 排除绑定数据的最后一行(或空白)(从 Microsoft Access 绑定)

    目前我正在使用 Microsoft Access 来保存数据 它将绑定到 WPF 组合框 下面的代码几乎可以正常工作 oleDBCommand CommandText SELECT table Col1 table Col2 As COl1
  • 了解所有线程何时完成并处理异常

    我正在使用 Executor 框架使用线程池 即 newFixedThreadPool 启动多个线程 我使用 threadpool submit aThread 提交要由线程池执行的作业 这工作正常 但是我需要确定所有线程何时完成 以便我可