Java调度程序,完全独立于系统时间变化
使用Java Timer,然后切换到SchpendentExecutorService,但我的问题没有得到解决。由于在系统时间更改(通过 ntpd)之前计划的任务不会在指定的延迟时执行。没有日志,因为:(没有任何事情发生。
在64位Linux上使用jre 1.6.0_26 64位。
更新:ScheduledExecutorService在Windows上运行良好。问题仅在运行64位JVM的基于64位Linux的系统上。它在运行32位JVM的64位Linux上运行良好...奇怪。也没有在任何博客上找到任何相同的参考。
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);
}
}