Javaタイマーを使用していた後、ScheduledExecutorServiceに切り替えましたが、私の問題は修正されていません。システム時刻の変更前に (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);
}
}