在许多来源中我发现 Thread.interrupted()
方法清除线程的中断状态,但没有一个解释该方法到底以这种方式工作的原因。
我仍然感到有点困惑,因为缺乏对这个原因的理解,也缺乏对java设计者试图通过清除中断状态来解决什么问题的理解。
如果有人能解释这一点并举一些例子,我将非常感激。
最佳答案
线程中断背后的想法是,一个线程可能会向另一个线程发出信号,请求它中断常规处理,以将其注意力转移到某些特定于线程的特殊操作。线程实际响应的内容完全取决于该线程中运行的代码。
线程判断自己是否被中断的方式主要有两种:
- 如果在设置了中断状态的线程中调用,或者线程被中断,则多个
Thread
和Object
方法将抛出InterruptedException
当该方法正在执行时。在此事件中,中断状态被清除,大概是因为该异常被认为是中断的充分通知。 - 线程中运行的代码可以调用
Thread.interrupted()
或Thread.currentThread().isInterrupted()
来主动测试中断。前者还重置中断状态;后者不会,可能是因为它是一种实例方法 - 如果一个线程调用另一个线程的isInterrupted()
方法,则中断一定不会丢失。
导致中断状态重置的技术这样做是为了使线程能够处理后续中断。这里的关键点也许是线程中断并不一定会导致被中断的线程关闭(尽管这确实是线程可以做出的一种响应)。这是一个更通用的机制。
关于java - Thread.interrupted()清除线程中断状态的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35673314/