java - 为什么使用 Thread.currentThread().isInterrupted() 而不是 isInterrupted()?

标签 java multithreading concurrency

我对 Thread 子类取消政策的实现有疑问。这样做似乎是常见的做法:

class A extends Thread {

  [...]

  public final void run() {
     try {
        while(!Thread.currentThread().isInterrupted()) {
           [...]
        }
     } catch (InterruptedException consumed) {
     }
  }

  public final void cancel() {
     interrupt();
  }    
}

我的问题是关于 Thread.currentThread()... 为什么通常的做法是使用 currentThread() 来检查中断标志而不是在 cancel() 方法中设置它?像这样调用 A 的 isInterrupted() 方法是否足够:

while (!isInterrupted()) {
   [...]
}

我在 Brian Goetz 关于并发 Java 或 stackoverflow 的 Thread JavaDoc 中都找不到答案。

提前感谢您的见解!

干杯, 乔治

最佳答案

在您的情况下,只需调用 !isInterrupted() 就足够了,因为您是从 Thread 类扩展的。通常您不会从 Thread 扩展 - 这就是您调用 Thread.currentThread() 的原因。

关于java - 为什么使用 Thread.currentThread().isInterrupted() 而不是 isInterrupted()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11682955/

相关文章:

java - JavaME 锁

multithreading - 多线程客户端-服务器 Web 服务 - 使服务器端数据线程安全

java - Java 与 Clojure 的良好并发示例

java - 如何在 Spring 中的 REST 服务的 HandlerInterceptor 中填充 ModelAndView

c++ - pthread 执行时间比顺序执行时间差

java - 您如何使用 Java 1.5 BlockingQueue 为多个消费者设计停止条件?

java - 从 List<Date> 创建一个 List<List<Date>> ,其中包含随后放入列表中的所有日期

java - Spring Security 循环 bean 依赖

java - Android KitKat 图像选择不返回任何东西

c++ - 检查另一个进程中的线程是否正在休眠