如何从执行程序中正确捕获RuntimeException?
说我有以下代码:
ExecutorService executor = Executors.newSingleThreadExecutor();executor.execute(myRunnable);
现在,如果myRunnable抛出RuntimeExcpetion,我该如何捕捉?一种方法是提供自己的ThreadFactory实现,newSingleThreadExecutor()并uncaughtExceptionHandler为其中Thread的设置custom
。另一种方法是将其包装myRunnable为Runnable包含try-catch -block
的本地(匿名)。也许还有其他类似的解决方法。但是…以某种方式感觉很脏,我觉得这不应该那么复杂。有没有干净的解决方案?
回答:
干净的解决方法是使用ExecutorService.submit()而不是execute()。这将返回一个Future,您可以用来检索结果或任务异常:
ExecutorService executor = Executors.newSingleThreadExecutor();Runnable task = new Runnable() {
public void run() {
throw new RuntimeException("foo");
}
};
Future<?> future = executor.submit(task);
try {
future.get();
} catch (ExecutionException e) {
Exception rootException = e.getCause();
}
以上是 如何从执行程序中正确捕获RuntimeException? 的全部内容, 来源链接: utcz.com/qa/407157.html

