1. ホーム
  2. java

タスクを定期的に実行するようにスケジュールするにはどうしたらいいですか?

2023-09-11 16:17:45

質問

スケジュールされたタスクを実装するためにいくつかのコードを試していたところ、以下のコードを思いつきました。

import java.util.*;

class Task extends TimerTask {


    int count = 1;

    // run is a abstract method that defines task performed at scheduled time.
    public void run() {
        System.out.println(count+" : Mahendra Singh");
        count++;
    }
}

class TaskScheduling {

   public static void main(String[] args) {
       Timer timer = new Timer();


       // Schedule to run after every 3 second(3000 millisecond)
       timer.schedule( new Task(), 3000);   
   }
}

私の出力:

1  :  Mahendra Singh

私はコンパイラが3秒の周期でマヘンドラ・シンのシリーズを出力することを期待しましたが、約15分間待っても1回しか出力されません。

どのように解決するのですか?

使用方法 timer.scheduleAtFixedRate

public void scheduleAtFixedRate(TimerTask task,
                                long delay,
                                long period)

指定されたタスクを、指定された遅延時間後に開始する定額の繰り返し実行のためにスケジューリングする。後続の実行は、指定された期間で区切られた、ほぼ一定の間隔で行われます。

定率実行では、各実行が最初の実行予定時刻を基準としてスケジュールされる。実行が何らかの理由(ガベージコレクションやその他のバックグラウンド活動など)で遅延した場合、2つ以上の実行が立て続けに発生し、追いつくことができます。

固定レートの実行は、毎正時にチャイムを鳴らしたり、毎日特定の時間にスケジュールされたメンテナンスを実行するなど、絶対的な時間に敏感な反復的なアクティビティに適しています。また、10秒間、毎秒1回カウントダウンするタイマーのように、一定回数の実行にかかる総時間が重要な反復的な活動にも適している。最後に、固定レート実行は、互いに対して同期を保つ必要がある複数の繰り返しタイマー タスクをスケジューリングするのに適しています。

パラメータです。

  • task - スケジュールされるタスク。
  • delay - タスクが実行されるまでのミリ秒単位の遅延時間です。
  • period - 連続したタスクの実行の間のミリ秒単位の時間です。

スローします。

  • IllegalArgumentException - delayが負の値、またはdelay + System.currentTimeMillis()が負の値である場合に発生します。
  • IllegalStateException - タスクがすでにスケジュールされているかキャンセルされている場合、タイマーがキャンセルされた場合、またはタイマーのスレッドが終了した場合。