私はこの単純なコードスニペットを持っています:
/**
* @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);
}
1台のマシンでは、このコードは期待どおりに実行されます。コンソール出力:
- 7月3日火曜日10:32:34EEST2012
- 7月3日火曜日10:32:34EEST2012
- 7月3日火曜日10:32:35EEST2012
- 7月3日火曜日10:32:35EEST2012
- 7月3日火曜日10:32:36EEST2012
- 7月3日火曜日10:32:36EEST2012..。
ただし、別のマシンでは、コンソールのタイムスタンプに、ScheduledThreadPoolExecutorが遅くなっていることが示されています。遅くなるということは、数秒という意味です:)
- 7月3日火曜日10:32:34EEST2012
- 7月3日火曜日10:32:37EEST2012
- 2012年7月3日火曜日10:32:40EEST
- 7月3日火曜日10:32:44EEST2012
- 7月3日火曜日10:32:50EEST2012
- 7月3日火曜日10:32:55EEST2012..。
コードが正常に実行される最初のマシンの詳細:
i3 Windows764ビットJRE1.6.0.30
スケジューリングが遅れて実行されている2番目のマシンの詳細:
デュアルコアWindowsXP32ビットJRE1.6.0.18
なぜそんな違いがあるのだろうか。助言がありますか ?
前もって感謝します。