Either re-interrupt this method or rethrow the “InterruptedException“ that can be caught here.
代码
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.为何是问题?
这里希望
- Thread.currentThread().interrupt(); 重新标记一下线程中断状态
- 或者 再次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.相关推荐
- interrupt、interrupted 、isInterrupted、InterruptedException
interrupt interrupt方法用于中断线程.调用该方法的线程的状态为将被置为"中断"状态. 注意:线程中断仅仅是置线程的中断状态位,不会停止线程.需要用户自己去监视线程 ...
- oracle querytimeout,聊聊pg jdbc的queryTimeout及next方法
序 本文主要介绍一下pg jdbc statement的queryTimeout及resultSet的next方法 实例程序 @Test public void testReadTimeout() t ...
- # 代码质量控制和代码质量相关工具说明
代码质量检测工具及检测说明 代码质量与规范 高质量代码的优势 易读性.可维护性高 安全性.可测试性高 高内聚低耦合方便功能扩展 代码质量目标 代码质量管控 规范化 : 建立代码规范与Code Revi ...
- 360奇安信和SonarQube漏洞及bug修改
360奇安信扫描 代码注入:SQL注入:MyBatis `#`变量名称创建参数化查询SQL语句,不会导致SQL注入.而`$`变量名称直接使用SQL指令,会导致SQL注入攻击 `#`变量名称,创建参数化 ...
- java sona 插件 提示 整理
java sona 插件 提示 整理 Refactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed ...
- 【面试:并发篇09:多线程:interrupt 方法详解】
[面试:并发篇09:多线程:interrupt 方法详解] 00.前言 如果有任何问题请指出,感谢. 01.介绍 程序中,有些线程的中断需要外部干预,比如线程中存在while(true)循环,或者存在 ...
- interrupt()方法
title:线程中断 date:2017年11月4日23:02:38 今天来看看线程中断的问题. 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法 ...
- Java Thread的interrupt方法详解
Java Thread的interrupt方法详解 一.概述 interrupt方法的目的是给线程发出中断信号,但是不保证线程真的会中断 中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应 ...
- 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 ...
最新文章
- ios 圆形旋转菜单_iOS高级动画:圆形树展开收起动画
- 斐波那契查找+思路分析
- Android插件化原理—ClassLoader加载机制
- [学习笔记]在数据库层面应对并发访问产生的问题
- 移动端1px细线问题
- 《Ansible权威指南 》一1.6 Ansible应用场景
- 安卓版有道词典的离线词库-《21世纪大英汉词典》等_我是亲民_新浪博客
- Canny 算子的非极大值抑制
- 024 幂函数、指数函数、对数函数导数公式推导
- 999. Available Captures for Rook
- 十四、中国为什么没有自己的指令集
- xp 架设网站服务器,WinXP如何设置iis服务器?WinXP iis服务器设置教程
- Linux proc目录详解
- windows PC/SC 常用Scard前缀函数说明
- 语音识别(20201030)——麦克风阵列(采集语音信号)
- 解决:Conda报错InvalidArchiveError
- 函数调用,形式参数和实际参数
- ArcBlock荣获“2018区块链之星”奖项
- 台灯c语言,基于msp430单片机的智能台灯设计(C语言).doc
- Ansys Zemax / SPEOS | 光源文件转换器