使用 Callable 处理来自 Java ExecutorService 任务的异常
在尝试处理来自 Java ExecutorService 任务的异常时,通常会子类化 ThreadPoolExecutor 并重写它的 afterExecute 方法。然而,这种方法可能并不总是按预期工作。
不要覆盖 afterExecute,而是考虑使用 Callable 任务。 Callable.call() 允许抛出已检查的异常,这些异常可以传播回调用线程。
这是使用 Callable 的示例:
Callable task = ...; Future future = executor.submit(task); // Perform other tasks while the Callable executes try { future.get(); } catch (ExecutionException ex) { // Process the exception thrown by the Callable ex.getCause().printStackTrace(); }
当 Callable.call() 抛出一个异常,它被包装在 ExecutionException 中并由 Future.get() 重新抛出。与子类化 ThreadPoolExecutor 相比,这提供了更强大的异常处理机制。
此外,使用 Callable 使您能够在异常可恢复的情况下重新提交任务,从而在错误处理方面提供更大的灵活性。
以上是如何使用 Callable 处理 ExecutorService 任务的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!