Java 的 Thread.sleep 什么时候抛出 InterruptedException?忽略它安全吗?我没有做任何多线程。我只想等几秒钟再重试一些操作。
原文由 Manki 发布,翻译遵循 CC BY-SA 4.0 许可协议
Java 的 Thread.sleep 什么时候抛出 InterruptedException?忽略它安全吗?我没有做任何多线程。我只想等几秒钟再重试一些操作。
原文由 Manki 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果抛出 InterruptedException
则意味着有东西想要中断(通常是终止)该线程。这是通过调用线程 interrupt()
方法触发的。 wait 方法检测到并抛出 InterruptedException
因此 catch 代码可以立即处理终止请求,而不必等到指定时间结束。
如果您在单线程应用程序(以及一些多线程应用程序)中使用它,则永远不会触发该异常。我不推荐使用空的 catch 子句来忽略它。抛出 InterruptedException
清除线程的中断状态,因此如果处理不当,信息就会丢失。因此我建议运行:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
再次设置该状态。之后,完成执行。这将是正确的行为,即使从未使用过。
可能更好的是添加这个:
} catch (InterruptedException e) {
throw new RuntimeException("Unexpected interrupt", e);
}
…捕获块的声明。这基本上意味着它绝不能发生。因此,如果代码在可能发生这种情况的环境中被重新使用,它就会抱怨。
原文由 Christian 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
您通常不应忽略该异常。看看下面的论文:
在此处查看整篇论文:
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-