我有一个奇怪的错误Thread.sleep()
关于Java。由于某种原因,当我在某些机器上调用 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)
什么可能导致这种行为?
UPDATE
修改后的版本,仍然永无止境:
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();
}
}
如果您的服务器在 Linux 下运行,您可能会受到闰秒错误 http://it.slashdot.org/story/12/07/01/1920217/leap-second-bug-causes-crashes上周末出现的。
这个 bug 会影响 Linux 内核(线程管理),因此使用线程的应用程序(如 JVM、mysql 等)可能会消耗高 CPU 负载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)