Использул Java Timer, затем переключился на ScheduledExecutorService, но моя проблема не исправлена. Поскольку Задачи, запланированные до изменения системного времени (через ntpd), не выполняются при указанной задержке. Нет журналов для того же, что ничего не происходит: (.
используя jre 1.6.0_26 64 бит в моей цели на 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);
}
}