关于java中的中断

时间:2013-06-01 09:12:17

标签: java multithreading interrupt

直接来自this oracle教程:

  

中断

     

中断是一个线程的指示,它应该停止它   正在做并做其他事情。这取决于程序员的决定   线程如何响应中断,但这很常见   为线程终止。这是在此强调的用法   教训。

“这取决于程序员决定...”在哪里可以编程该特定行为?“线程终止”意味着非常普遍标准行为终止线程?

修改 例如,我们有来自Sempaphore类的acquireUninterruptibly方法,如果接收到一个中断,它只会延迟中断导致中断的时间的等待时间。在这种情况下,中断处理可能只包含一个Thread.yield()?   提前谢谢。

3 个答案:

答案 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();
}

现在回答您的问题:

  1. 从上面的例子可以看出,如果方法没有处理,你可以自己处理InterruptedException
  2. 正如您可以为这些方法处理此问题,您可以执行其他任务而不是退出。但是在中断发生后退出线程绝对是最常见的。
  3. 来源javadoc

答案 1 :(得分:1)

出现问题时出现中断(即使存在其他情况),程序将切换到中断服务程序。它可以处理那里的问题并继续执行或终止,如果它无法解决。

在java中,即使是“异常”(中断),我们通常会编写这样的例程(可能会导致中断)和catch(异常),我们会抓住它并处理它。如果问题无法解决,我们终止它。

答案 2 :(得分:0)

当您设置中断时,它会设置一个标志,它比这更复杂,但这是基本行为。您可以使用

对点进行编程以检测中断
if(Thread.currentThread.isInterrupted())

或使用基本上完成此功能的功能。你不应该认为发生了一些神奇的事情。在一天结束时,一切都是使用代码实现的。

相关问题