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

为何静态方法Thread.interrupted会清除非静态的线程中断状态?

为什么静态方法Thread.interrupted()能清除线程的非静态中断状态?

Thread.interrupted()虽然是静态方法,但它本质上是操作当前执行该方法的线程实例的中断状态,核心逻辑如下:

  • 当调用静态的Thread.interrupted()时,方法内部会先通过Thread.currentThread()获取到正在执行这段代码的线程对象(这是一个具体的Thread实例,拥有自己的非静态中断状态字段)。
  • 随后它会调用该实例的私有方法isInterrupted(boolean ClearInterrupted),并传入参数true——这个参数的作用就是让方法在返回当前中断状态的同时,清除该线程的中断标志位。
  • 而非静态的isInterrupted()方法,内部其实调用了同一个私有方法,但传入的参数是false,所以只会返回当前中断状态,不会修改标志位。

简单来说,静态方法只是借了"静态"的壳,实际操作的还是当前线程实例的非静态字段,相当于通过Thread.currentThread()拿到实例后,再去操作它的中断状态,完全符合面向对象的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:02:39