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?
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% 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.
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 ...)
Tags und Links java multithreading concurrency interrupt