Использовал Java Timer, затем переключился на ScheduledExecutorService, но моя проблема не исправлена.
Поскольку задачи, запланированные до изменения системного времени (через ntpd), не выполняются с указанной задержкой. Не иметь журналов для того же, поскольку ничего не происходит: (.
с использованием 64-битной jre 1.6.0_26 в моей цели на 64-битной Linux.
Обновление: ScheduledExecutorService отлично работает на Windows. Проблема только в 64-битной системе на базе Linux с 64-битной JVM. Работает нормально
на
64-разрядная версия Linux работает под управлением 32-разрядной JVM ... странно. Не нашел ни одного упоминания об этом ни в одном блоге.
У IBM JAVA SDK такая же проблема
(IBM-Java-СДК-7.0-0.0-x86_64-archive.bin).
Я подал дефект против JDK 7139684 , он был принят, но был закрыт и
отмечен дубликат 6900441 . Пожалуйста, проголосуйте за это, если вы чувствуете
его стоит исправить ... Я понятия не имею, почему его не исправили более двух лет назад
Вот пример кода, который я использовал для проверки этой проблемы:
package test;
import java.io.IOException;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @author yogesh
*
*/
public class TimerCheck implements Runnable {
ScheduledExecutorService worker;
public TimerCheck(ScheduledExecutorService worker) {
super();
this.worker = worker;
this.worker.schedule(this, 1, TimeUnit.SECONDS);
}
private static void update() {
System.out.println("TimerCheck.update() "+new Date(System.currentTimeMillis()));
}
@Override
public void run() {
update();
worker.schedule(this, 1, TimeUnit.SECONDS);
}
/**
* @param args
*/
public static void main(String[] args) {
ScheduledExecutorService worker = Executors.newScheduledThreadPool(1);
new TimerCheck(worker);
}
}