You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thread.Interrupt()不生效,isInterrupted判断通过后sleep仍抛InterruptedException

问题原因分析
  • 核心原因是检查操作与sleep操作之间存在竞态条件:if (!loadThread.isInterrupted()) 判定为真仅代表执行这行代码的瞬间线程未被中断,但从判断结束到Thread.sleep(500)实际执行的时间窗口内,完全可能有其他线程调用了该线程的interrupt()方法设置了中断标记,此时进入sleep后就会立刻触发InterruptedException。
  • 额外注意:isInterrupted()是Thread类的实例方法,调用时不会清除线程的中断标记,如果你后续还要继续处理中断逻辑,需要在catch块中手动重置中断状态或者做对应的业务终止处理。
修复方案
  • 删掉多余的中断状态前置判断即可,Thread.sleep()本身自带中断响应能力,前置判断不仅无法避免中断异常,反而会引入不必要的竞态问题,修改后代码参考如下:
try {
    Thread.sleep(500);
} catch (InterruptedException e) {
    e.printStackTrace();
    // 此处可补充业务中断后的处理逻辑,比如终止任务、重置中断标记等
}

内容的提问来源于stack exchange,提问作者Igorson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 18:03:00