我已阅读http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html

我决定通过以下方式使我的锁无法取消

try {
    lockedRecords.wait();
} catch (InterruptedException e) {
    interrupted = true;
}


但是有必要

} finally {
    if (interrupted) {
        Thread.currentThread().interrupt();
    }
}


本文说您应该调用interrupt()来保留中断状态。我仍然很模糊,所以如果设置.interrupt怎么办?接下来发生什么?有点迷失了..任何输入?

它给我的程序带来什么价值?请以通俗易懂的方式进行解释,不胜感激:D

最佳答案

这里重要的是示例中未编写的代码。
示例(getNextTask)中的方法可用于:

while (!Thread.interrupted()) {
   Task task = getNextTask(queue);
   doSomething(task);
}
System.out.println("The thread was interrupted while processing tasks.");
System.out.println("...stopped processing.");


除非有人中断运行此循环的线程,否则上述while循环将永远执行。

如果中断状态没有像在getNextTask中那样重置,当某人试图在线程在queue.take中的getNextTask中中断该线程时,该中断将丢失,我上面编写的代码位将丢失永不停止循环。

IBM网站上的示例的全部要点是,吞下中断时必须非常小心,因为它可能会意外使线程无法中断。

关于java - 管理InterruptedException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7004037/

10-09 04:34