Thread.isInterrupted funktioniert nicht, Thread.interrupted tut es

8

Das folgende Programm demonstriert das Problem (letzte JVM & amp; whatnot):

%Vor%     
ripper234 06.01.2010, 10:34
quelle

2 Antworten

4

Sieht aus wie ein bekanntes Problem mit Multi-Prozessor-Maschinen, hauptsächlich im 64-Bit-Betriebssystem und Java-Versionen von 1.5 - 7.0

Eine Beschreibung des Problems: Bei der Ausführung von zwei simultanen Threads unterbricht der erste Thread den zweiten mit Thread.interrupt (). Der zweite Thread testet, ob er unterbrochen wurde, indem er die Thread.isInterrupted () -Methode aufruft, die immer false zurückgibt.

Dies tritt auf einem Multiprozessor-PC auf, der ein 64-Bit-Betriebssystem (Vista und Linux) ausführt. Unter Vista 64-Bit tritt dies bei Verwendung einer 64-Bit-JVM (alle Versionen von 1,5 bis 1,7) auf, tritt jedoch bei Verwendung einer 32-Bit-JVM nicht auf. Unter Linux 64-Bit tritt dies bei Verwendung einer 64-Bit-JVM (alle Versionen von 1,5 bis 1,7) oder bei Verwendung einer 32-Bit-JVM (alle Versionen von 1,5 bis 1,7).

Die Lösung besteht darin, die Version mit dem Fix zu installieren, der 1.6.0_16-b02 oder höher ist.

    
Mocky 06.01.2010, 12:34
quelle
0

ripper234, ich habe das gerade auf meinem Rechner ausgeführt und es hört immer auf, egal welchen Wert ich für die Drucke verwende und welche Unterbrechungen zu verwenden sind. Ich benutze jdk1.6.0_16. Beim Betrachten des Javadoc hat es vielleicht etwas damit zu tun, dass interrupted () den (unterbrochenen) Zustand nach jedem Aufruf löscht und isInterrupted () nicht. die Tatsache, dass es manchmal für Jerome funktioniert, immer für mich, und nie (?) für Sie könnte einen Unterschied in den jdks, die wir verwenden, ODER die Geschwindigkeit unserer Maschinen angezeigt. Wenn es etwas mit der Klärung des Staates zu tun hat, könnte das die Variabilität erklären.

    
PaulP1975 06.01.2010 12:19
quelle