Java中finally失效的几种情况【持续更新】

背景

在Java开发中,使用tray catch + finally 组合可执行和抛出异常,方便定位问题,在finally中异步记录日志信息。

功能

1、异常处理机制

如在try中加锁,在finally中解锁

在finally中异步记录日志

原理分析

finally语句一定执行,基于 Java编译器在字节码层面,会生成额外的字节码,将finally中的语句逻辑复制到 try和catch的出口后,只要程序执行,就会走finally的逻辑。

注意:finally语句块的执行是在return语句之前。

失效情况

1、终止JVM

如在 try catch中调用 【system】的exit方法,终止JVM

java 复制代码
// 手动终止Jvm
System.exit(init);

2、线程终止

在try catch处理线程,调用【Thread】的stop方法

java 复制代码
// 手动终止线程
Thread.stop();

3、死循环

在try catch 中有死循环,死锁等情况,程序一直执行,最终可能无法进入到finally语句中。

相关推荐
月落归舟1 小时前
SpringMVC 多种响应返回方式
java·开发语言
吃饱了得干活1 小时前
JVM垃圾回收:从新生代到ZGC,从理论到调优
java·jvm·后端
长不胖的路人甲1 小时前
二叉排序树(BST)Java 完整实现 + 删除思路详解
java·开发语言·算法
geovindu1 小时前
python: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·python·算法·搜索算法
大模型码小白2 小时前
Java 部署:Jenkins Pipeline 构建 Java 项目(自动化)
java·人工智能·python·机器学习
长不胖的路人甲2 小时前
可达性分析法(根搜索算法)完整详解
java·jvm·算法
笨笨饿2 小时前
#102_Codex无在VSCold无法打开
java·c语言·数据库·笔记
程序员清风2 小时前
AI不是万能的,大家要专注实践!
java·后端·面试
青山木2 小时前
Hot 100 --- 全排列
java·数据结构·算法·leetcode·深度优先