Silentdoer

导航

java finally一定会执行吗?

1.答案是不一定,而且很容易弄出不执行的情况;

最简单的:在IDEA上执行:

try {
    log("aaa");
    Thread.sleep(10000);
    log("bbbb");
} catch(Exception e) {
    log("ddd");
} finally{
    log("eee");
}

在打印了aaa后点击红色方框停止按钮,会发现应用就停止了,然后没有继续打印其他的;

 

而这个进程进行kill -9 $pid也会导致强制关闭java进程,然后finally块不会执行;

所以finally在重启应用时是很常见的,finally不会执行;

比如容器应用重启,肯定不会一直等你,很多时候就是强制重启的;

 

因此涉及到分布式锁依赖finally来处理逻辑的,处理状态数据的,一定要考虑好finally没有执行的情况;

posted on 2023-11-21 14:17  Silentdoer  阅读(63)  评论(0编辑  收藏  举报