ScheduledThreadPoolExecutor オブジェクトを使用してタスクをスケジュールしています。私は次の方法を使用します。
public ScheduledFuture<?> schedule(Runnable command, long delay,TimeUnit unit)
遅延を 30 秒に設定します (遅延 = 30,000 および単位 = TimeUnit.MILLISECONDS)。タスクがすぐに実行される場合もあれば、70 秒かかる場合もあります。
ScheduledThreadPoolExecutor は CPU 固有のクロックを使用していると思います。System.currentTimeMillis()、System.nanoTime() [CPU 固有] を比較するテストを実行すると、次のように表示されます。
スケジュール: 1272637682651ms、7858346157228410ns
実行: 1272637682667ms、7858386270968425ns
差は 16ms ですが、4011374001ns (または 40,113ms)
40秒の2つのCPUクロックの間に不一致があるように見えます
Java コードでこの問題を解決するにはどうすればよいですか? 残念ながら、これはクライアント マシンであり、システムを変更することはできません。