线程池执行了多个线程,然后设置了超时强制中断,结果测试时候无限报中断异常。
后来发现是调用service层时候,有个方法捕获了中断没层层上抛导致的。
想问下,这里子线程调用其他方法的时候,他们不是同一条线程么,为什么非要在子线程当前方法内捕获到才会正常断开。
ES查询时,线程强制中断,无限抱中断异常的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 千夜枫叶 2023-04-14 09:00关注
在多线程环境中,每个线程都是独立的执行单元,它们在各自的线程栈中执行,互不影响。如果一个线程中调用了另一个方法,那么这个方法将在同一个线程中执行。
当您在主线程中设置超时强制中断时,如果子线程中的某个方法捕获了中断异常并将其处理掉,那么该线程仍然会继续执行,直到该线程的执行完毕或者因其他原因结束。因此,您需要在每个子线程中显式地检查中断状态,并在需要时抛出中断异常,以确保子线程可以及时响应中断信号。
一种常见的做法是,将每个线程的执行逻辑封装在一个单独的方法中,并在该方法中捕获中断异常,并将中断异常抛出到上一层调用方法中。这样,即使子线程中的某个方法捕获了中断异常,该异常也会被正确地传递到主线程,并导致线程池中的所有线程都被正确地中断。
总之,确保子线程能够及时响应中断信号,需要在子线程中的所有方法中显式地检查中断状态,并在需要时抛出中断异常,以确保中断信号可以被正确地传递和处理。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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#的问题,如何解决?