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

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

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

  • 写回答

1条回答 默认 最新

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

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

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

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

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

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?