Java捕获异常后线程情况


单线程
如果异常不是被线程本身捕获的话,线程肯定就终止了,会被GC回收。
如果异常被线程本身捕获处理了,那么将会继续执行线程下的逻辑操作,直接完毕后再被回收

多线程

在多线程外部使用一组try catch来捕获异常是不合理的,会导致异常退出。
原因是因为线程是并行运行的,在捕获到单个线程的异常时,try catch可能会起作用,但当其它并行线程也出现异常情况时,try catch就不再起作用了,导致程序异常退出.因此,在多线程运行情况下,不要指望单个外部的try catch能捕获的所有线程的异常并安全退出,而是需要在每个单独的线程内使用try catch来捕获每个线程的异常

try-catch的时候在默认情况下如:控制层--业务层处理中是不会调用守护线程的,java有一个默认的守护线程来调用GC回收已经执行完的程序,业务逻辑处理完之后出现错误抛出异常被控制层捕获停止工作,在一定默认时间后会被清理,一般在业务层处理curd异常是不需要使用try-catch的,虽然这样业务处理完成,但是线程并没有及时被清理从而影响性能。

建议在业务层直接抛出异常然后写个捕获类业务层统一进行处理,这样异常被捕获后线程虽然也没有被立即杀死,但是它响应到前端之后spring会对这个线程直接进行回收,这样对性能有很大的提升,而且统一定义错误回收对代码也有好处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值