2

私はこの簡単なコードを持っています:

@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例外はブロック内でキャッチされますが、そうでなければ例外はスローされませんが、エラーは発生しません。ロックされ、コードの実行を継続していないようです。

なぜこの動作ですか?私は何かを誤解しましたか?これは期待されていませんか?

4

1 に答える 1

2

あなたが示していないコードについて推測していますが、これがExecutorServiceで呼び出すCallableである場合、 Callable コード内で発生した例外は、 get( ) Callableを送信したときに返された Future のメソッド。get() を呼び出すと、根本原因がコードからスローされた例外である ExecutionException がスローされます。

簡単に言うと、ExecutorService を使用してコードを別のスレッドにフォークすると、そのコードからスローされた例外はキャッチされ、戻ってコードの実行結果を要求するまで保持されます。そうしないと、例外が消えてしまいます。

于 2011-10-21T03:10:29.993 に答える