我想澄清一下线程中断。
如果线程长时间不调用抛出 InterruptedException 的方法怎么办?然后它必须定期调用 Thread.interrupted,如果已收到中断,则返回 true。例如:
for (int i = 0; i < inputs.length; i++) {
heavyCrunch(inputs[i]);
if (Thread.interrupted()) {
// We've been interrupted: no more crunching.
return;
}
}
当我调用方法 Thread.interrupt()
时,它会抛出中断异常,所以,为什么我需要执行 if (Thread.interrupted())
我会简单地执行那个
try {
for (int i = 0; i < inputs.length; i++) {
heavyCrunch(inputs[i]);
if (Thread.interrupted()) {
// We've been interrupted: no more crunching.
return;
}
}
} catch (InterruptedException ex) {
...
}
最佳答案
当您在另一个线程上调用 Thread.interrupt()
时,会发生两件事:
- 该线程的中断标志已设置。
- 如果线程在
抛出 InterruptedException
的方法中被阻塞,该方法将立即抛出异常。
如果线程忙于某些不抛出InterruptedException
的代码,您将不会得到任何异常。这就是为什么您需要检查 if (Thread.interrupted())
,以检查标志。
在您的示例代码中,Java 编译器会提示 catch
block 无效,因为 try
block 中的所有代码都不会抛出 InterruptedException
。
关于java - Java中的线程中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22356082/