interrupt () funktioniert nicht

8

Ich versuche, den Thread im folgenden Code zu beenden:

%Vor%

Aber der Thread wird nicht beendet. Ich habe den Debugger benutzt und festgestellt, dass nach dem Befehl this.interrupt() der Thread nicht unterbrochen wird (ich habe den Ausdruck this.isInterrupted() beobachtet und bleibt false ). Jeder hat eine Idee, warum dieser Thread nicht unterbrochen wird?

Bearbeiten:

Das Problem wurde gefunden. Es stellte sich heraus, dass es zwei Instanzen dieses Threads gab. Ich füge den problematischen Code an, der dazu führt:

%Vor%     
Ori Popowski 25.12.2011, 00:57
quelle

2 Antworten

5

Nach den Dokumenten , Wenn Sie interrupt() aufrufen, während sich der Thread im Zustand wait() befindet, wird das Interrupt-Flag nicht gesetzt. Sie sollten eine unterbrochene Ausnahme erhalten, die die Schleife (und den Thread) beendet.

BEARBEITEN

Nach meinem Kommentar und Ihrer Antwort besteht das Problem darin, dass mehr als einer dieser Threads ausgeführt wird.

    
Ted Hopp 25.12.2011 01:03
quelle
2

Wahrscheinlich rufst du cancel im falschen Thread an. Wenn Sie es betrachten, löscht cancel() diesen Thread . Wahrscheinlich möchtest du einen anderen Thread abbrechen.

Es ist auch wahr, dass Ihr Aufruf von isInterrupted() unnötig ist, aber das führt nicht dazu, dass Interrupts verloren gehen ...

Wenn andererseits die Methode cancel eine Methode einer Klasse ist, die Thread erweitert, dann kann this der Thread sein, der abgebrochen werden muss. (Das Problem für uns Leute, die versuchen zu antworten ist, dass es in der ursprünglichen Frage nicht genügend Details gibt ...)

    
Stephen C 25.12.2011 01:05
quelle