2013-12-25 3 views
7

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

Semaphore lock = new Semaphore(0); 

try { 

    lock.acquire(); 

} finally { 

// do something 

} 

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

Документ Oracle. говорит:

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

ответ

6

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

+0

Теперь, когда вы говорите, это кажется совершенно очевидным. Спасибо. –

1

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

Смежные вопросы