java - 为什么在 catch InterruptException block 中调用 Thread.currentThread.interrupt()?

标签 java multithreading

为什么要在catch block 中调用Thread.currentThread.interrupt()方法?

最佳答案

这样做是为了保持状态

当您捕获 InterruptedException 并将其吞下时,您基本上可以防止任何更高级别的方法/线程组注意到中断。这可能会导致问题。

通过调用Thread.currentThread().interrupt(),你设置了线程的中断标志,所以更高级别的中断处理程序会注意到它并可以适本地处理它。

Java Concurrency in Practice第 7.1.3 章:响应中断中更详细地讨论了这一点。它的规则是:

Only code that implements a thread's interruption policy may swallow an interruption request. General-purpose task and library code should never swallow interruption requests.

关于java - 为什么在 catch InterruptException block 中调用 Thread.currentThread.interrupt()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4906799/

相关文章:

c# - 分配给未执行的新线程的方法

java - 如何使用Maven项目在JAR中添加测试类

java - setLocation() 并不总是适用于没有布局管理器的面板内的 JLabel 对象,这是一个错误吗?

java - 如何使用 PrintWriter 从路径创建丢失的文件夹?

java 按当前日期排序列表,然后按日期比较

java - 与线程相比,进程在上下文切换方面是否有任何开销?

java - 通用对象池阈值

java - 对于 Java 中的生产者-消费者来说,什么是更好的习惯用法?

java - 我可以在泛型类参数上调用静态方法吗

java - FixedThreadPool 不够并行