Die Endless 2020-12-05 16:31 采纳率: 50%
浏览 93
已采纳

使用try-catch的时候,程序会不会开启守护线程?

    今天项目组组长看了下我的代码,然后痛骂一顿,原因是:我在service层crud方法(只是简单操作表,没其他业务)上抛出了一个Exception,然后在controller中调的时候try-catch.

    组长说的问题有两点:

   1. 没有必要这样处理,如果在crud过程中出现异常要么是参数未校验,要么是数据库连接问题,要么是sql有问题,参数未校验是自己代码写的有问题不需要try-catch,数据库连接问题,sql有问题,框架会抛出异常,也不需要不需要try-catch(这点我能理解)

   2. 使用try-catch会开启守护线程,使用过多影响性能.(发起提问的关键,查了下资料没能理解)

   在使用try-catch的时候,程序会开启守护线程吗?

  • 写回答

1条回答 默认 最新

  • 减白 2020-12-05 17:14
    关注

     

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

    try-catch的时候在默认情况下如:控制层--业务层处理中是不会调用守护线程的,java有一个默认的守护线程来调用GC回收已经执行完的程序,你的业务逻辑处理完之后出现错误抛出异常被控制层捕获停止工作,在一定默认时间后会被清理,一般在业务层处理curd异常是不需要使用try-catch的,这样虽然你的业务处理完成但是你的线程并没有及时被清理从而影响性能,建议你在业务层直接抛出异常然后写个捕获类业务层统一进行处理,这样异常被捕获后线程虽然也没有被立即杀死,但是它响应到前端之后spring会对这个线程直接进行回收,这样对性能有很大的提升,而且统一定义错误回收对你的代码也有好处。

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示