在某个线程上调用Thread.interrupt()时会发生什么?

时间:2010-02-18 15:46:00

标签: java multithreading interrupt

在某个线程上调用Thread.interrupt()时,该线程会发生什么?

4 个答案:

答案 0 :(得分:30)

目标线程被“中断”。通常,在该线程中设置一个标志,线程可以查看该标志(使用Thread.interrupted())。如果目标线程当前在某些I / O或Object.wait()上被阻止,则它分别被InterruptedIOExceptionInterruptedException唤醒。

线程中断是一种轻松推动线程的方法。它用于让线程有机会退出干净地,而不是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)

蔡司是正确的,信号是最干净的方式。你也可以捕获中断异常并以这种方式清理。