我有这个简单的代码片段:
/**
* @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);
}
在一台机器上,此代码按预期运行。控制台输出:
- 2012 年 7 月 3 日星期二 10:32:34 EEST
- 2012 年 7 月 3 日星期二 10:32:34 EEST
- 2012 年 7 月 3 日星期二 10:32:35 EEST
- 2012 年 7 月 3 日星期二 10:32:35 EEST
- 2012 年 7 月 3 日星期二 10:32:36 EEST
- 2012 年 7 月 3 日星期二 10:32:36 EEST ...
但是在另一台机器上,控制台上的时间戳显示 ScheduledThreadPoolExecutor 迟到了。迟到是指几秒钟 :)
- 2012 年 7 月 3 日星期二 10:32:34 EEST
- 2012 年 7 月 3 日星期二 10:32:37 EEST
- 2012 年 7 月 3 日星期二 10:32:40 EEST
- 2012 年 7 月 3 日星期二 10:32:44 EEST
- 2012 年 7 月 3 日星期二 10:32:50 EEST
- 2012 年 7 月 3 日星期二 10:32:55 EEST ...
代码成功运行的第一台机器的详细信息:
i3 Windows 7 64 位 JRE 1.6.0.30
调度运行延迟的第二台机器的详细信息:
双核 Windows XP 32 位 JRE 1.6.0.18
我想知道为什么会有这样的差异。有什么建议么 ?
提前致谢。