QG94Y 2023-04-14 08:06 采纳率: 100%
浏览 6
已结题

ES查询时,线程强制中断,无限抱中断异常的问题

线程池执行了多个线程,然后设置了超时强制中断,结果测试时候无限报中断异常。
后来发现是调用service层时候,有个方法捕获了中断没层层上抛导致的。
想问下,这里子线程调用其他方法的时候,他们不是同一条线程么,为什么非要在子线程当前方法内捕获到才会正常断开。

  • 写回答

1条回答 默认 最新

  • 千夜枫叶 2023-04-14 09:00
    关注

    在多线程环境中,每个线程都是独立的执行单元,它们在各自的线程栈中执行,互不影响。如果一个线程中调用了另一个方法,那么这个方法将在同一个线程中执行。

    当您在主线程中设置超时强制中断时,如果子线程中的某个方法捕获了中断异常并将其处理掉,那么该线程仍然会继续执行,直到该线程的执行完毕或者因其他原因结束。因此,您需要在每个子线程中显式地检查中断状态,并在需要时抛出中断异常,以确保子线程可以及时响应中断信号。

    一种常见的做法是,将每个线程的执行逻辑封装在一个单独的方法中,并在该方法中捕获中断异常,并将中断异常抛出到上一层调用方法中。这样,即使子线程中的某个方法捕获了中断异常,该异常也会被正确地传递到主线程,并导致线程池中的所有线程都被正确地中断。

    总之,确保子线程能够及时响应中断信号,需要在子线程中的所有方法中显式地检查中断状态,并在需要时抛出中断异常,以确保中断信号可以被正确地传递和处理。

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

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 创建了问题 4月14日

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题