InterruptedException之后的线程行为

时间:2015-12-27 18:38:58

标签: java

如果你抓住InterruptedException但是不使用Thread.currentThread().interrupt();命令,线程会发生什么? 线程如何表现?

2 个答案:

答案 0 :(得分:2)

您捕获的InterruptedException意味着有人通过调用interrupt()要求您的线程停止。您需要执行两个步骤,其中一个步骤可以通过两种不同的方式完成。

  • 首先,你需要确保你所处的任何循环都被打破了。最简单的方法是在循环之外捕获异常。

  • 第二,你需要确保线程停止。

    • 这可以通过编写代码来实际退出线程来完成 - 例如,当您在run()方法中捕获异常时,这很容易。

    • 或者你可以调用Thread.currentThread().interrupt()并退出你所处的任何方法。这将允许调用堆栈中更高级别的任何循环来处理中断,希望执行我描述的两个步骤

在任何一种情况下,请确保将数据保持一致状态,安全以供其他线程使用。

此外,如果您希望线程可以中断,请不要忘记在循环条件中检查Thread.currentThread().interrupted()。只有一些方法抛出InterruptedException,你的循环中可能没有这样的方法。

答案 1 :(得分:0)

它的行为方式与未被中断的方式相同:您忽略了要求您停止运行的异常,并且您已经清除了中断标志,应该定期轮询以了解是否应该停止运行。

因此,线程执行的代码不能再知道它已被中断,因此它将继续运行,好像什么也没发生,直到线程再次被中断,并且反应正确。