在 Java 中抛出复合异常

Ji *_*ANG 3 java exception

我正在使用ExecutorService,FutureCallable进行并行处理。虽然Callable在调用时可以捕获 的异常Future#get,但如何捕获所有可调用对象抛出的所有异常,然后抛出一个巨大的复合异常,例如:

ExecutorService service = Executors.newFixedThreadPool(5);
List<Future<Void>> futures = new ArrayList<Future<Void>>();
futures.add(service.submit(new TaskA());
futures.add(service.submit(new TaskB());

for (Future<Void> future : futures) {
    try {
        future.get();
    } catch (Exception e) {
        // ???
    }
}

// throw the big exception here

service.shutdown();
Run Code Online (Sandbox Code Playgroud)

Bar*_*lly 5

如果要将多个异常与单个抛出关联起来,请addSuppressed在最外面的异常上使用。

它在捕获方面不会对您有太大帮助,但全面的错误处理绝非易事,尤其是在加入多个控制线程之后。