Я планирую задачу, используя объект ScheduledThreadPoolExecutor. Я использую следующий метод:
public ScheduledFuture<?> schedule(Runnable command, long delay,TimeUnit unit)
и установите задержку на 30 секунд (задержка = 30 000 и единица измерения = TimeUnit.MILLISECONDS). Иногда моя задача возникает сразу, а иногда - 70 секунд.
Я считаю, что ScheduledThreadPoolExecutor использует специфичные для процессора часы. Когда я запускаю тесты, сравнивающие System.currentTimeMillis (), System.nanoTime () [который зависит от процессора], я вижу следующее
расписание: 1272637682651мс, 7858346157228410нс
Выполнить: 1272637682667мс, 7858386270968425нс
разница составляет 16 мс, но 4011374001 нс (или 40,113 мс)
так что, похоже, что расхождение между двумя тактовыми частотами процессора составляет 40 секунд
Как мне решить эту проблему в коде Java? К сожалению, это клиентская машина, и я не могу изменить их систему.