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 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理