我有这个简单的代码片段:
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(10);
Runnable r = new Runnable() {
@Override
public void run() {
System.err.println(Calendar.getInstance().getTime());
}
};
exec.scheduleAtFixedRate(r,0, 500, TimeUnit.MILLISECONDS);
}
在一台计算机上,此代码按预期运行。控制台输出:
但是在另一台机器上,控制台上的时间戳显示ScheduledThreadPoolExecutor迟到了。迟到我的意思是几秒钟:)
代码成功运行的第一台机器的详细信息:
I3 Windows 7 64位 JRE 1.6.0.30
调度迟到的第二台机器的详细信息:
双核心 Windows XP 32位 JRE 1.6.0.18
我想知道为什么会有这样的差异。有什么建议吗?
提前致谢。
答案 0 :(得分:1)
实际上,计划计时器不准确,它按cpu刻度计算时间。 因此,如果您的机器负载太重,可能会有一些延迟。 检查你的第二台机器的负载!