[英]Restoring Interruption flag status in Java
再会!
由于 SonarQube 报告的错误,我一直在浏览 Java 文档和一些关于正确处理InterruptedException
的在线资源。但不确定我是否 100% 理解Interruption flag
状态是否总是必须在我们可以处理的地方发生 InterruptedException 时恢复' 为 Ex: Runnable 实现抛出异常。
让我们考虑下面复制的演示示例代码,其中 main 方法负责启动一些异步方法。异步方法使 Http GET 请求和处理(通过将runnable
作为 addListener 方法的参数)异步响应。
注意:现在我的查询是我是否必须在第 35 行恢复Interruption status
标志。 为什么问这个是因为,
InterruptedException
。 因此,即使不恢复标志,我的意图/要求也得到满足,即用一些默认响应完成CompletableFuture
。Thread.interrupted()
或Thread.currentThread().isInterrupted()
因为我不想处理这个因为我的要求已经通过返回默认响应得到满足。如果我仍然想恢复中断标志状态,有人可以解释为什么要恢复相同的状态,如果我不恢复它,我的代码 go 怎么会出错?
. 因为,正如我在以上 4 点中所说,即使不恢复标志,我的要求也得到了满足。
对于上述确切场景,对此主题的任何启发/澄清都非常值得赞赏。
提前致谢:)
在您的程序中,您可能确实不需要处理InterruptedException
。
但在一般情况下,吞下InterruptedException
是一个坏主意。
主要原因是Thread.interrupt()
(会导致InterruptedException
)是中断 Java 标准库提供的许多阻塞操作的唯一方法。
例如,当我们想优雅地关闭我们的应用程序时(即当我们想在关闭前关闭文件、网络连接和其他资源时),通常需要正确处理InterruptedException
。
有关此的一些信息可以在Thread.interrupt()
javadocs中找到。
另外,我会推荐这个 SO 答案和那里提到的“Java 并发实践”中的相关章节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.