为何静态方法Thread.interrupted会清除非静态的线程中断状态?
为什么静态方法Thread.interrupted()能清除线程的非静态中断状态?
Thread.interrupted()虽然是静态方法,但它本质上是操作当前执行该方法的线程实例的中断状态,核心逻辑如下:
- 当调用静态的
Thread.interrupted()时,方法内部会先通过Thread.currentThread()获取到正在执行这段代码的线程对象(这是一个具体的Thread实例,拥有自己的非静态中断状态字段)。 - 随后它会调用该实例的私有方法
isInterrupted(boolean ClearInterrupted),并传入参数true——这个参数的作用就是让方法在返回当前中断状态的同时,清除该线程的中断标志位。 - 而非静态的
isInterrupted()方法,内部其实调用了同一个私有方法,但传入的参数是false,所以只会返回当前中断状态,不会修改标志位。
简单来说,静态方法只是借了"静态"的壳,实际操作的还是当前线程实例的非静态字段,相当于通过Thread.currentThread()拿到实例后,再去操作它的中断状态,完全符合面向对象的逻辑。
内容的提问来源于stack exchange,提问作者yasee
相关产品推荐
相关产品推荐

