线程池执行了多个线程,然后设置了超时强制中断,结果测试时候无限报中断异常。
后来发现是调用service层时候,有个方法捕获了中断没层层上抛导致的。
想问下,这里子线程调用其他方法的时候,他们不是同一条线程么,为什么非要在子线程当前方法内捕获到才会正常断开。
ES查询时,线程强制中断,无限抱中断异常的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 千夜枫叶 2023-04-14 09:00关注
在多线程环境中,每个线程都是独立的执行单元,它们在各自的线程栈中执行,互不影响。如果一个线程中调用了另一个方法,那么这个方法将在同一个线程中执行。
当您在主线程中设置超时强制中断时,如果子线程中的某个方法捕获了中断异常并将其处理掉,那么该线程仍然会继续执行,直到该线程的执行完毕或者因其他原因结束。因此,您需要在每个子线程中显式地检查中断状态,并在需要时抛出中断异常,以确保子线程可以及时响应中断信号。
一种常见的做法是,将每个线程的执行逻辑封装在一个单独的方法中,并在该方法中捕获中断异常,并将中断异常抛出到上一层调用方法中。这样,即使子线程中的某个方法捕获了中断异常,该异常也会被正确地传递到主线程,并导致线程池中的所有线程都被正确地中断。
总之,确保子线程能够及时响应中断信号,需要在子线程中的所有方法中显式地检查中断状态,并在需要时抛出中断异常,以确保中断信号可以被正确地传递和处理。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 AT89C51控制8位八段数码管显示时钟。
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 下图接收小电路,谁知道原理
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题