Estoy tratando de interrumpir el hilo en el siguiente código:interrupción() no funciona
public synchronized void run() {
try {
while (!Thread.currentThread().isInterrupted()) {
this.scan();
this.distribute();
this.wait();
}
} catch (InterruptedException e) {}
}
public void cancel() {
this.interrupt();
}
Pero el hilo no se terminará. Usé el depurador y descubrí que después del comando this.interrupt()
, el hilo no se interrumpe (puse un reloj en la expresión this.isInterrupted()
y se queda false
). ¿Alguien tiene una idea de por qué este hilo no será interrumpido?
Editar:
El problema ha sido encontrado. Resulta que hubo dos instancias de este hilo. Te adjunto el código problemático que conducen a esto:
/* (class Detector extends Thread) */
Detector detector = new Detector(board);
...
Thread tdetector = new Thread(detector); /* WRONG!!! */
...
tdetector.start();
...
¿Qué pasa si lo intentas con '! Thread.interrupted()' en la condición –
No hay static método en la clase 'Thread' con ese nombre. Y no tendría sentido, porque este es un método que está relacionado con una instancia de esta clase. –
Ciertamente hay un método estático ['Thread.interrupted()'] (http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#interrupted%28%29). No creo que ayude, sin embargo, porque básicamente hace lo mismo que el método de instancia (pero también borra la bandera interrumpida, lo que puede complicar las cosas). –