我对线程子类的取消策略的实现有疑问。这样做是一种常见的做法:

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()) {
   [...]
}

我在Thread JavaDoc上也找不到答案,这是Brian Goetz关于并发Java或stackoverflow的出色著作。

预先感谢您的见解!

干杯,
格奥尔格

最佳答案

在您的情况下,仅调用!isInterrupted()就足够了,因为您是从Thread类扩展而来的。通常,您不从Thread扩展,这就是为什么您调用Thread.currentThread()的原因。

07-24 19:17