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语句中。

相关推荐
AI你一生一世19 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
布莱克60519 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
云-缩影19 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
LabVIEW开发19 小时前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
瑞克-桑切斯19 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
benchmark_cc20 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
Zenova EdgeOS21 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是21 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
FRing031 天前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Fatbobman(东坡肘子)1 天前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift