在Java中抛出复合异常

时间:2013-11-12 01:23:18

标签: java exception

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

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();

2 个答案:

答案 0 :(得分:1)

也许我错过了什么,但是

public class CompositeException extends Exception {
    private List<Exception> exceptions = new ArrayList<Exception>();
    public List<Exception> getExceptions() {
        return exceptions;
    }
}

实例化其中一只小狗并在投掷之前加载所有异常。

答案 1 :(得分:1)

如果要将多个异常与一次抛出相关联,请对最外层的异常使用DialogInterface.OnCancelListener

在捕获方面不会有太大帮助,但是全面的错误处理从来都不容易,尤其是在加入多个控制线程之后。