直接来自this oracle教程:
中断
中断是一个线程的指示,它应该停止它 正在做并做其他事情。这取决于程序员的决定 线程如何响应中断,但这很常见 为线程终止。这是在此强调的用法 教训。
“这取决于程序员决定...”在哪里可以编程该特定行为?“线程终止”意味着非常普遍标准行为终止线程?
修改 例如,我们有来自Sempaphore类的acquireUninterruptibly方法,如果接收到一个中断,它只会延迟中断导致中断的时间的等待时间。在这种情况下,中断处理可能只包含一个Thread.yield()? 提前谢谢。
答案 0 :(得分:2)
通常像睡眠的方法会抛出InterruptedException
。
如果一个线程长时间没有调用抛出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;
}
}
在这个简单的例子中,代码只是测试中断并退出线程(如果已收到)。在更复杂的应用程序中,抛出InterruptedException可能更有意义:
if (Thread.interrupted()) {
throw new InterruptedException();
}
现在回答您的问题:
来源:javadoc
答案 1 :(得分:1)
出现问题时出现中断(即使存在其他情况),程序将切换到中断服务程序。它可以处理那里的问题并继续执行或终止,如果它无法解决。
在java中,即使是“异常”(中断),我们通常会编写这样的例程(可能会导致中断)和catch(异常),我们会抓住它并处理它。如果问题无法解决,我们终止它。
答案 2 :(得分:0)
当您设置中断时,它会设置一个标志,它比这更复杂,但这是基本行为。您可以使用
对点进行编程以检测中断if(Thread.currentThread.isInterrupted())
或使用基本上完成此功能的功能。你不应该认为发生了一些神奇的事情。在一天结束时,一切都是使用代码实现的。