在某个线程上调用Thread.interrupt()
时,该线程会发生什么?
答案 0 :(得分:30)
目标线程被“中断”。通常,在该线程中设置一个标志,线程可以查看该标志(使用Thread.interrupted()
)。如果目标线程当前在某些I / O或Object.wait()
上被阻止,则它分别被InterruptedIOException
或InterruptedException
唤醒。
线程中断是一种轻松推动线程的方法。它用于让线程有机会退出干净地,而不是Thread.stop()
,这更像是用突击步枪射击线程。
答案 1 :(得分:2)
Javadoc for that method解释了在什么情况下会发生什么。
答案 2 :(得分:2)
这是JDK 1.6 Javadoc:
中断此主题。
除非当前线程是 打断自己,这总是如此 允许,checkAccess方法 可以调用此线程 导致SecurityException 抛出。
如果此线程被阻止 调用wait(),wait(long), 或等待(long,int)方法 对象类,或者join(), join(long),join(long,int), 睡觉(长),或睡觉(长,int), 这个类的方法,然后它的 中断状态将被清除 它会收到一个 InterruptedException的。
如果此线程在I / O中被阻止 对可中断的操作 然后通道将是通道 关闭,线程的中断状态 将被设置,线程将 收到ClosedByInterruptException。
如果此线程被阻止 然后选择线程的中断 状态将被设置,它将返回 立即从选择 操作,可能是非零 值,就像选择器一样 唤醒唤醒方法。
如果没有以前的条件 然后保持这个线程的中断 状态将被设置。
中断不是的线程 活着不需要有任何影响。
答案 3 :(得分:0)
蔡司是正确的,信号是最干净的方式。你也可以捕获中断异常并以这种方式清理。