我在使用Java的Thread.sleep()
时遇到了奇怪的错误。在某些机器上,当我调用sleep时,它永远不会返回。我无法弄清楚是什么原因导致了这种行为。起初,我以为错误可能出现在我的代码的其他地方,因此我进行了最简单的sleep测试:
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...");
}
}
在大多数机器上它可以工作,但在我远程登录的一些机器上,它在打印语句之间无限期地暂停。我已经等了半个小时,行为没有任何改变。显示此错误的机器是Linux机器。以下是有关这些机器的一些信息:
$ 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)
这种行为的原因可能是什么?
更新
仍然无法结束的修订版本:
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();
}
}
Thread.sleep(100);
也能够正常工作。 - Denys Séguretfinally
子句会发生什么? - Radu Murzea