我正在尝试在以下代码中终止线程:
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();
...
最佳答案
根据the docs的说明,如果在线程处于interrupt()
状态时调用wait()
,则不会设置中断标志。您应该得到一个中断的异常,它将退出循环(和线程)。
编辑
根据我的评论和您的答复,问题是您有多个线程在运行。