代码

public void main() {try {Thread.sleep(100L);} catch (Exception e) {log.error("err. "e);}
} 

sonar提示问题

Either re-interrupt this method or rethrow the "InterruptedException" that can be caught here.为何是问题?

这里希望

  1. Thread.currentThread().interrupt(); 重新标记一下线程中断状态
  2. 或者 再次throw InterruptedException

所以 对应1的正确写法:

public void main() {try {Thread.sleep(100L);} catch (InterruptedException e) {log.error("err", e);Thread.currentThread().interrupt();} catch (Exception e) {log.error("err. ",e);}
}

原因

java interrup()函数会中断线程(本质更新线程为中断状态)。若sleep()函数检测到线程中断(interrupt()函数触发) 会抛 InterruptedException, 被catch住后线程中断状态更新为未中断(参考:https://www.codenong.com/cs106837995/)。

sonar检测到该问题会提示此种潜在逻辑,防止忽略该潜在风险而导致代码bug。

所以,正确处理方式需要手动再次触发一下Thread.currentThread().interrupt();

Either re-interrupt this method or rethrow the “InterruptedException“ that can be caught here.相关推荐

  1. interrupt、interrupted 、isInterrupted、InterruptedException

    interrupt interrupt方法用于中断线程.调用该方法的线程的状态为将被置为"中断"状态. 注意:线程中断仅仅是置线程的中断状态位,不会停止线程.需要用户自己去监视线程 ...

  2. oracle querytimeout,聊聊pg jdbc的queryTimeout及next方法

    序 本文主要介绍一下pg jdbc statement的queryTimeout及resultSet的next方法 实例程序 @Test public void testReadTimeout() t ...

  3. # 代码质量控制和代码质量相关工具说明

    代码质量检测工具及检测说明 代码质量与规范 高质量代码的优势 易读性.可维护性高 安全性.可测试性高 高内聚低耦合方便功能扩展 代码质量目标 代码质量管控 规范化 : 建立代码规范与Code Revi ...

  4. 360奇安信和SonarQube漏洞及bug修改

    360奇安信扫描 代码注入:SQL注入:MyBatis `#`变量名称创建参数化查询SQL语句,不会导致SQL注入.而`$`变量名称直接使用SQL指令,会导致SQL注入攻击 `#`变量名称,创建参数化 ...

  5. java sona 插件 提示 整理

    java sona 插件 提示 整理 Refactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed ...

  6. 【面试:并发篇09:多线程:interrupt 方法详解】

    [面试:并发篇09:多线程:interrupt 方法详解] 00.前言 如果有任何问题请指出,感谢. 01.介绍 程序中,有些线程的中断需要外部干预,比如线程中存在while(true)循环,或者存在 ...

  7. interrupt()方法

    title:线程中断 date:2017年11月4日23:02:38 今天来看看线程中断的问题. 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法 ...

  8. Java Thread的interrupt方法详解

    Java Thread的interrupt方法详解 一.概述 interrupt方法的目的是给线程发出中断信号,但是不保证线程真的会中断 中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应 ...

  9. Java Thread interrupt isAlive Volatile

    1.1 Overview 1.2 Get a reference to yourself as a thread 1.3 Summary of methods 2.1 What is an inter ...

最新文章

  1. ios 圆形旋转菜单_iOS高级动画:圆形树展开收起动画
  2. 斐波那契查找+思路分析
  3. Android插件化原理—ClassLoader加载机制
  4. [学习笔记]在数据库层面应对并发访问产生的问题
  5. 移动端1px细线问题
  6. 《Ansible权威指南 》一1.6 Ansible应用场景
  7. 安卓版有道词典的离线词库-《21世纪大英汉词典》等_我是亲民_新浪博客
  8. Canny 算子的非极大值抑制
  9. 024 幂函数、指数函数、对数函数导数公式推导
  10. 999. Available Captures for Rook
  11. 十四、中国为什么没有自己的指令集
  12. xp 架设网站服务器,WinXP如何设置iis服务器?WinXP iis服务器设置教程
  13. Linux proc目录详解
  14. windows PC/SC 常用Scard前缀函数说明
  15. 语音识别(20201030)——麦克风阵列(采集语音信号)
  16. 解决:Conda报错InvalidArchiveError
  17. 函数调用,形式参数和实际参数
  18. ArcBlock荣获“2018区块链之星”奖项
  19. 台灯c语言,基于msp430单片机的智能台灯设计(C语言).doc
  20. Ansys Zemax / SPEOS | 光源文件转换器

热门文章

  1. H5移动端禁止长按保存图片
  2. 【obs】转载:OBS直播严重延迟和卡顿怎么办?
  3. Windows变慢原因分析
  4. 深度学习——图像分类相关模型一览
  5. 立交匝道中边桩坐标放样正反算程序RAMP
  6. 微信小程序开发(六)——服务器
  7. PyTorch笔记 - MAE(Masked Autoencoders) PyTorch源码
  8. python axis到底如何理解?
  9. 计算机领域国际学术会议和期刊
  10. Android面试,给正在找工作的安卓攻城师们 ... ...