Mam nieparzysty błąd z Thread.sleep()
na Java. Z jakiegoś powodu, kiedy wywołuję uśpienie na niektórych maszynach, nigdy nie wraca. Nie mogę zrozumieć, co może być przyczyną tego zachowania. Początkowo ja thgouth błędu może być gdzie indziej w moim kodu, więc zrobiłem najprostszą możliwą próbę uśpienia:Thread.sleep() Nigdy nie zwraca
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...");
}
}
Na większości maszyn to działa, ale na kilku maszynach, które mam zdalnie zalogowaniu się, że wstrzymuje na czas nieokreślony między instrukcjami drukowania. Czekałem nawet pół godziny bez zmiany zachowania. Maszyny, które wyświetlają ten błąd, to komputery z systemem Linux. Oto kilka informacji o maszynach:
$ 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)
Co może być przyczyną tego zachowania?
UPDATE
wersja poprawiona, co jeszcze nigdy się nie kończy:
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();
}
}
pan sprawdzić, czy nie ma błędu zwolniony wewnątrz połowu? może printStackTrace? –
możesz spróbować tego w osobnym wątku, aby upewnić się, że to nadal występuje? co robisz, to umieszczenie głównego wątku w trybie uśpienia, co może spowodować problem? –
Czy jesteś pewien, że problem nie dotyczy regeneracji drugiego println (tak jak robisz to zdalnie)? Może brakujący kolor? 'Thread.sleep (100);' działa nawet na Linuksie. –