【问题标题】:Why the exception is not being thrown?为什么没有抛出异常?
【发布时间】:2011-12-12 06:09:50
【问题描述】:

我有这段简单的代码:

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

我在 getConnection() 方法中得到了一个 SQLException。如果我放了一个catch,异常会在块中被捕获,但如果没有,异常不会提前抛出,但不会发生错误。似乎它已被锁定并且无法继续执行代码。

为什么会有这种行为?我误解了什么?这不是预期的吗?

【问题讨论】:

    标签: java exception callable


    【解决方案1】:

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

    更简单地说,当您使用 ExecutorService 将代码派生到另一个线程时,该代码引发的任何异常都会被捕获并保留,直到您返回并询问运行代码的结果。如果你从不这样做,那么异常就会消失。

    【讨论】:

    • 是的,谢谢,我想是这样,我删除了get() 方法。谢谢你的解释。我不知道为什么,但我认为只有结果会随着get而来,解释会随时抛出。现在我可以解决这个问题了。
    • @RenatoDinhaniConceição 在询问时提供尽可能多的信息的原因之一:)
    猜你喜欢
    • 2021-07-08
    • 2020-11-04
    • 1970-01-01
    • 2010-12-09
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多