如何从执行程序中正确捕获RuntimeException?

说我有以下代码:

ExecutorService executor = Executors.newSingleThreadExecutor();

executor.execute(myRunnable);

现在,如果myRunnable抛出RuntimeExcpetion,我该如何捕捉?一种方法是提供自己的ThreadFactory实现,newSingleThreadExecutor()uncaughtExceptionHandler为其中Thread的设置custom

。另一种方法是将其包装myRunnableRunnable包含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

回到顶部