我对线程子类的取消策略的实现有疑问。这样做是一种常见的做法:
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()
的原因。