我试图在以下代码中终止该线程:
public synchronized void run() {
try {
while (!Thread.currentThread().isInterrupted()) {
this.scan();
this.distribute();
this.wait();
}
} catch (InterruptedException e) {}
}
public void cancel() {
this.interrupt();
}
但线程不会终止。我使用了调试器并发现在命令this.interrupt()
之后,线程没有被中断(我对表达式this.isInterrupted()
进行监视并且它保持false
)。任何人都知道为什么这个帖子不会被打断?
已发现问题。原来这个帖子有两个实例。我附上导致这个问题的有问题的代码:
/* (class Detector extends Thread) */
Detector detector = new Detector(board);
...
Thread tdetector = new Thread(detector); /* WRONG!!! */
...
tdetector.start();
...
答案 0 :(得分:5)
根据the docs,如果在线程处于interrupt()
状态时调用wait()
,则不会设置中断标志。你应该得到一个中断的异常,它将退出循环(和线程)。
修改强>
根据我的评论和您的回复,问题是您运行了多个这样的线程。
答案 1 :(得分:2)
你可能在错误的线程上调用cancel
。如果您查看它,cancel()
会取消此主题。你可能想要取消一些其他线程。
您对isInterrupted()
的调用也是不必要的,但这不会导致中断丢失......
另一方面,如果cancel
方法是扩展Thread
的类的方法,那么this
可能是需要取消的线程。 (我们这些人试图回答的问题是原始问题中的细节不够......)