Использовал 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-sdk-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);
}
}