mar*_*man 7 java multithreading finally
我注意到在Java中,如果当前线程在try-block中暂停,则相应的finally块不会被执行,例如
Semaphore lock = new Semaphore(0);
try {
lock.acquire();
} finally {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这种观察可以推广到线程的暂停,即Oracle文档说它只能用于绕过return,break并且continue?
Oracle doc.说:
但最终不仅仅是异常处理有用 - 它允许程序员避免因返回,继续或中断而意外绕过清理代码.
try块完成后,finally块将开始执行.由于线程没有完成执行try块,因此无法进入finally块.但这并不意味着绕过了finally块.当线程返回时它仍然会被执行lock.acquire().
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |