Ваще-блок и нить подвеска

Я заметил, что в Java, если текущий поток приостановлен в блоке try, соответствующий блок finally не выполняется, например, в

Semaphore lock = new Semaphore(0);

try {

    lock.acquire();

} finally {

// do something

}

Может ли это наблюдение быть обобщено на приостановку потоков, т. Е. Верно ли то, что в документе Oracle сказано, что его можно использовать только для обхода return, break а также continue?

Oracle Doc. говорит:

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

3 ответа

Решение

Блок finally начнет выполняться после завершения блока try. Поскольку поток не завершил выполнение блока try, он не может войти в блок finally. Это не значит, что блок finally обойден. Он все равно будет выполнен, когда поток вернется из lock.acquire(),

Довольно сложно обойти блок finally, даже если вы этого хотите.
Для более подробной информации о том, когда это может произойти, проверьте их, например.

Всегда ли работает блок finally?

При каких обстоятельствах блок finally {} НЕ будет выполнен?

finally блок будет выполнен, когда try отделки. Неважно, приостановлена ​​нить или нет.

Другие вопросы по тегам