为什么没有抛出异常?

时间:2011-10-21 02:08:48

标签: java exception callable

我有这段简单的代码:

@Override
public Object call() throws Exception {
    try (Connection conn = ConnectionPool.getConnection()) {
        pageDAO = new PageDAO(conn);
        linkDAO = new LinkDAO(conn);
        loopInsertion();
    }
    return true;
}

我在SQLException方法中获得getConnection()。如果我放置catch,则会在块中捕获异常,但如果不是,则不会向前抛出异常,但不会发生错误。看起来它已被锁定而不会继续执行代码。

为什么会这样?我误会了什么?预计不会这样做吗?

1 个答案:

答案 0 :(得分:2)

我猜测你没有显示的代码,但是如果这是你用a Callable调用的an ExecutorService,那么在Callable代码中发生的任何异常都不会传播到任何地方,直到您one of the get()the Future上的submitted the Callable方法为止{{3}}。当你调用get()时,它会抛出一个ExecutionException,它的根本原因是你的代码抛出的异常。

更简单地说,当您使用ExecutorService将代码分叉到另一个线程时,从该代码抛出的任何异常都会被捕获并保留,直到您回来并询问运行代码的结果为止。如果你从未这样做过,那么例外就会消失。