7
私はこの単純なコードスニペットは:期待通りに一台のマシン上でのScheduledThreadPoolExecutorなっ後半
/**
* @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);
}
、このコードが実行されます。コンソール出力:
- 火7月3日10時32分34秒EEST 2012
- 火7月3日10時32分34秒EEST 2012
- 火7月3日10時32分35秒EEST 2012
- 火7月03午前10時32分35秒EEST 2012
- 火7月3日10時32分36秒EEST 2012
- 火7月3日10時32分36秒EEST 2012 ...
しかし、別のマシンでは、コンソールのタイムスタンプがScheduledThreadPoolExecutorが遅くなっていることを示します。後半に取得することによって、私は秒のカップルを意味:)
- 火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 2012 ...
詳細:
i3の Windows 7の64ビット JRE 1.6.0.30遅れてスケジューリングした第2のマシンの
詳細:
デュアルコア のWindows XP 32ビット JRE 1.6.0.18
なぜこのような違いがあるのだろうか。助言がありますか ?
ありがとうございます。
環境(os、jvm)の詳細について教えてください。 – assylias
スケジューリングはOSレベルのシステムコールを使用して遅延を実行します。これが間違っていると、レベルの問題が発生します。 –
少なくとも、2つのホストの合計CPU使用率を含めることができます。 –