Планировщик Java, полностью независимый от изменений системного времени

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

}

17
задан YoK 30 January 2012 в 12:47
поделиться