Ich habe einen seltsamen Fehler mit Thread.sleep()
auf Java. Aus irgendeinem Grund, wenn ich auf einigen Maschinen Schlaf rufe, kehrt es nie zurück. Ich kann nicht herausfinden, was dieses Verhalten verursachen könnte. Zunächst thgouth ich den Fehler könnte an anderer Stelle in meinem Code sein, so habe ich die einfachste mögliche Schlaftest:Thread.sleep() gibt nie zurück
public class SleepTest {
public static void main (String [] args) {
System.out.println ("Before sleep...");
try {
Thread.sleep (100);
} catch (InterruptedException e) {
}
System.out.println ("After sleep...");
}
}
Auf den meisten Maschinen es funktioniert, aber auf mehreren Maschinen, die ich remote in bin anmelden, es macht eine Pause auf unbestimmte Zeit zwischen den Druckanweisungen. Ich habe bis zu einer halben Stunde ohne Verhaltensänderung gewartet. Die Maschinen, die diesen Fehler anzeigen, sind Linux-Maschinen. Hier sind einige Informationen über die Maschinen:
$ uname -a
Linux zone29ea 2.6.32-220.17.1.el6.x86_64 #1 SMP Tue May 15 17:16:46 CDT 2012 x86_64 x86_64 x86_64 GNU/Linux
$ java -version
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.6) (rhel-1.43.1.10.6.el6_2-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
Was könnte dieses Verhalten verursachen?
UPDATE
Überarbeitete Version, die noch nie endet:
public class SleepTest {
public static void main (String [] args) {
new Thread() {
public void run() {
System.out.println ("Before sleep...");
try {
Thread.sleep (100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println ("After sleep...");
}
}.start();
}
}
hast du überprüfen, ob es einen Fehler in Ihrem Fang gebrannt wird? vielleicht eine printStackTrace? –
könnten Sie das in einem separaten Thread versuchen, um sicherzustellen, dass das noch auftritt? was Sie tun, ist das Haupt-Thread in den Ruhezustand setzen, die das Problem verursachen könnte –
Sind Sie sicher, dass das Problem nicht in der Erholung der zweiten println ist (wie Sie es remote tun)? Vielleicht ein fehlender Flush? 'Thread.sleep (100);' funktioniert sogar unter Linux. –