我有这段简单的代码:
@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
,则会在块中捕获异常,但如果不是,则不会向前抛出异常,但不会发生错误。看起来它已被锁定而不会继续执行代码。
为什么会这样?我误会了什么?预计不会这样做吗?
答案 0 :(得分:2)
我猜测你没有显示的代码,但是如果这是你用a Callable调用的an ExecutorService,那么在Callable代码中发生的任何异常都不会传播到任何地方,直到您one of the get()上the Future上的submitted the Callable方法为止{{3}}。当你调用get()时,它会抛出一个ExecutionException,它的根本原因是你的代码抛出的异常。
更简单地说,当您使用ExecutorService将代码分叉到另一个线程时,从该代码抛出的任何异常都会被捕获并保留,直到您回来并询问运行代码的结果为止。如果你从未这样做过,那么例外就会消失。