1

TimerTask を使用して、毎日実行するスレッドをスケジュールしています。これがコードです。

private void scheduleDailyProcess() {
    Calendar c = Calendar.getInstance();
    c.add(Calendar.DATE, 1);
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 5);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);

    Timer timer = new Timer();

    int period = 24 * 60 * 60 * 1000; //24 hours
    timer.schedule(new DailyProcess(), c.getTime(), period );
}

スレッドを毎日午前 00:05 に実行したい。ただし、スレッドが 8 秒の不特定の遅延で開始されることに気付きました。

コードに何か不足していますか? または、TimerTask に問題がありますか?

DailyProcess 内に遅延はありません。

4

1 に答える 1

1

このタスクの前に別の何かが実行されていて、DailyProcess の最初の実行が遅れている可能性があります。

TimerTask のドキュメントによると:

各 Timer オブジェクトに対応するのは、タイマーのすべてのタスクを順番に実行するために使用される単一のバックグラウンド スレッドです。タイマー タスクはすぐに完了する必要があります。タイマー タスクの完了に時間がかかりすぎると、タイマーのタスク実行スレッドが「占有」されます。これにより、後続のタスクの実行が遅延する可能性があり、問題のあるタスクが最終的に完了すると、「まとまり」、立て続けに実行される可能性があります。

于 2013-03-27T14:18:03.140 に答える