Почему исключение не выбрасывается? - PullRequest
2 голосов
/ 21 октября 2011

У меня есть этот простой кусок кода:

@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 Ответ

2 голосов
/ 21 октября 2011

Я догадываюсь о коде, который вы не показывали, но если это Callable , который вы вызываете с ExecutorService , любое исключение, которое происходит внутри кода Callable не будет никуда распространяться, пока вы не вызовете один из методов get () для Future , который был возвращен, когда вы отправили Callable . Когда вы вызываете get (), он генерирует исключение ExecutionException, основной причиной которого является исключение, выброшенное из вашего кода.

Проще говоря, когда вы разветвляете код в другой поток с помощью ExecutorService, любое исключение, генерируемое из этого кода, перехватывается и удерживается до тех пор, пока вы не вернетесь и не спросите результат выполнения кода. Если вы этого не сделаете, исключение просто исчезнет.

...