如何从执行程序中正确捕获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