我正在使用 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
差异是 16 毫秒,但 4011374001ns(或 40,113 毫秒)
所以看起来两个40秒的CPU时钟之间存在差异
我如何在java代码中解决这个问题?不幸的是,这是一台客户端机器,我无法修改他们的系统。