java - 如何从父线程中注意到异常?

标签 java multithreading exception-handling executorservice

我正在将线程提供给 ExecutorService

这些线程正在处理一些数据,如果发生冲突,数据对象会抛出一个异常,该异常会被冲突的线程捕获,然后中止并且不会完成执行。

发生这种情况时,需要将中止线程放回队列中并反馈给执行器。

如何判断父线程是否抛出异常?

最佳答案

当您在 ExecutorServicesubmit() 一个任务时,您会得到一个 Future 作为结果。执行完成后,您可以在那个 future 调用 get()。如果适用,这将返回结果,或者如果原始任务抛出一个,它将抛出一个 ExecutionException。如果您想要真正的异常对象,您可以执行 getCause()

另请注意,您会将 Task 放回服务中,该任务在 Thread 上运行,该线程尚未真正终止(只是捕获异常并且是等待新的)。

这是一个示例用法(如果您不关心结果,可以使用 Runnable)。

Callable<String> myCallable = ...;
Future<String> future = myExector.submit(myCallable);

// Do something else until myCallable.isDone() returns true.
try {
    String result = future.get();
}catch(ExecutionException e){
    // Handle error, perhaps create new Callable to submit.
}

关于java - 如何从父线程中注意到异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13796767/

相关文章:

java - 从 java 连接 Neo4j 时出错

wpf - 捕获线程、任务、计时器、ThreadPool 线程和后台工作线程上引发的 UnhandledExceptions

multithreading - 如何在 Go 中用 channel 替换 goroutine 循环

Powershell 陷阱 [异常] 没有捕捉到我的错误

java - 嵌套 PreparedStatements 的最佳实践是什么?

java - IdentityHashMap 和 expectedmaxsize

java - Cassandra 服务器无法在 Debian 上运行

multithreading - 核心数据保存竞争条件错误

php - 在Laravel 5中获取错误严重性

java - Spring 。异常翻译如何工作?