我对 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/