当前位置: 首页 > news >正文

实用指南:疑难bug之正确处理InterruptedException

目录

问题出自:

java中断原理:

解决方法:


问题出自:

在rabbitmq 的消费者处理消息体,捕获中断异常同时重新进行中断,导致消费线程停止。

我们业务代码中有中断响应,通过catch捕获了这种中断,简单按照sonar扫描给出的建议调用Thread.currentThread().interrupt();结果直接给消费线程停止了。

catch (InterruptedException e) {log.error("busi error:{}", e.getMessage(), e);//业务异常,无法重试,不重新入队列channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);//Thread.currentThread().interrupt();会导致消费端无法正常消费
}

Thread.currentThread().interrupt(); 方法重新进行了中断即消费线程中断标记为true,导致rabbitmq的当前消费线程停止不再处理消息。

java中断原理:

  • java中断响应是描述当一个线程或方法A处于运行、阻塞或死锁状态时,外界(通常指其他线程、系统IO等)对A的影响能否让A线程或者方法抛出InterruptedException异常并提前返回,如果会提前返回并且抛出InterruptedException,就叫可中断响应途径或线程,要是不会抛出InterruptedException,就叫不可中断线程或方法。

  • 每个线程都有一个与线程是否已中断的相关联的 Boolean 属性,用于表示线程的中断状态(interrupted status)。中断状态初始时为 fals
http://www.jsqmd.com/news/5061/

相关文章:

  • 课后作业1-3
  • GNSS精度判断和协方差矩阵 - MKT
  • 实用指南:clsx:高效处理 React 条件类名的实用工具
  • Insightly模板页面存储型XSS漏洞分析与复现
  • 记录 | 关于陪伴型交互AI的一些探讨
  • luogu P1719 最大加权矩形
  • CF2065D Skibidus and Sigma
  • 微信二次开发个人号api
  • 深入解析:神经网络二分类任务详解:前向传播与反向传播的数学计算
  • 课后作业2(动手动脑,课后实验性问题)
  • 从零开始构建图注意力网络:GAT算法原理与数值实现详解
  • 分解原则编写
  • 关于Leetcode 812题的简单思考
  • Laravel5.8 利用 snappyPDF 生成PDF文件
  • 数据结构——链表 - 详解
  • 25秋周总结4
  • Python 潮流周刊#121:工程师如何做出高效决策?
  • 饥荒联机版
  • LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(5——通过cpp-httplib库建立网页模块) - 详解
  • iSCSI网络存储——基于VM17下麒麟V10SP1与SP2的共享配置
  • 微信二次开发文档
  • CSP-S1 2025
  • 金币
  • 【阿里DeepResearch】写作组件WebWeaver详解 - 指南
  • 【远程桌面】运维强推设备之远程控制软件RustDesk 1.4.1 全面指南:开源远程桌面的终极解决方案
  • 完整教程:PostgreSQL 知识体系
  • 加密货币技术革命:揭秘数字复兴时代
  • 第六篇
  • 6378:删除数组中的元素(链表)
  • 【底层机制】Android标准C库为什么选择 bionic 而不是 musl【一】 - 详解