我正在尝试在以下代码中终止线程:

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(),则不会设置中断标志。您应该得到一个中断的异常,它将退出循环(和线程)。

编辑

根据我的评论和您的答复,问题是您有多个线程在运行。

07-24 21:18