我正在阅读有关 Java 并发的本教程。链接文章中提供了有关Thread.interrupted
.
中断机制是使用称为中断状态的内部标志来实现的。调用 Thread.interrupt 设置此标志。当线程通过调用静态方法检查中断时
Thread.interrupted
,中断状态被清除。isInterrupted
一个线程用来查询另一个线程的中断状态的非静态方法不会改变中断状态标志。按照惯例,任何通过抛出一个退出的方法都会InterruptedException
清除中断状态。然而,中断状态总是有可能被另一个线程调用中断立即再次设置。
这是对应的Javadoc
java.lang.Thread
public static boolean interrupted()
测试当前线程是否被中断。通过该方法清除线程的中断状态。换句话说,如果这个方法被连续调用两次,第二次调用将返回 false(除非当前线程再次被中断,在第一次调用清除其中断状态之后,第二次调用检查它之前)。由于在中断时线程不活动而被忽略的线程中断将通过此方法返回 false 来反映。
返回: 如果当前线程已被中断,则返回 true;否则为假。
也可以看看:
isInterrupted()
在阅读了这两个解释之后Thread.interrupted
,我对中断标志是什么以及它在哪里被清除感到困惑。像这样的函数不应该Thread.interrupted
是幂等的并且不应该修改它被调用的对象的状态吗?我知道它Thread.interrupted
是静态的,因为它在 and 上运行,currentThread()
并且Thread.isInterrupted
是一个实例方法,因为它在Thread
它被调用的实例上运行。