Java タイマー

Rashmi Patidar 2023年10月12日
  1. Java で Timer を使用して 1 回限りのタスクをスケジュールする
  2. Java で繰り返しタイマーをスケジュールする
Java タイマー

Timer は、ユーザーが将来のイベントをスケジュールできるようにする Java プログラミング言語で利用可能なサービスです。これらの将来のイベントは、1 回の場合もあれば、一定の時間間隔で繰り返す場合もあります。将来のイベントを開始するために使用するトリガーが存在する可能性があります。

Java で Timer を使用して 1 回限りのタスクをスケジュールする

import java.util.Timer;
import java.util.TimerTask;

public class StopWatch {
  Timer timer;

  public StopWatch(int seconds) {
    timer = new Timer();
    timer.schedule(new StopTask(), seconds * 1000);
  }

  public static void main(String[] args) {
    new StopWatch(10);
    System.out.println("StopWatch Started.");
  }

  class StopTask extends TimerTask {
    public void run() {
      System.out.println("Time Up!");
      timer.cancel();
    }
  }
}

上記のコードブロックでは、StopWatch クラスという名前のパブリッククラスを作成しました。パブリックコンストラクタがあり、数秒で時間がかかります。コンストラクターブロックで、タイマーインスタンスが作成されます。タイマーインスタンスを介して、schedule メソッドが呼び出されます。このメソッドタスクは、特定のイベントを指定された時間にスケジュールすることです。これは、2つのパラメーターTimerTask インスタンスと遅延を取ります。遅延をミリ秒単位で定義します。このメソッドは、定義された指定された遅延が無効な場合は IllegalArgumentException をスローし、提供されたタスクがすでにスケジュールまたはキャンセルされている場合は IllegalArgumentException をスローします。また、提供されたタスクインスタンスが null の場合、NullPointerException をスローします。

コンストラクターのすぐ下に、実際の実行が開始される main メソッドがあります。遅延が定義された StopWatch クラスの新しいインスタンスを作成し、コンストラクターブロックのステートメントを内部的に実行します。

main メソッドの下に、TimerTask 抽象クラスを拡張する StopTask という名前の内部クラスが定義されています。TimerTask は、run メソッドと呼ばれる抽象メソッドを持つ抽象クラスです。メソッドは StopTask クラスでオーバーライドされる必要があり、オーバーライドされない場合は、クラス自体が抽象になる必要があります。run メソッドでは、cancel メソッドでタイマーを停止しました。このメソッドは、現在スケジュールされているタスクをすべて破棄し、タイマータスクを終了します。

以下は、上記のコードブロックの出力です。2 行目は、schedule メソッドの遅延が発生したときに出力されます。

StopWatch Started.
Time Up!

Java で繰り返しタイマーをスケジュールする

上記のコードを変更して、繰り返しタイマーを作成します。繰り返しタイマーは、一定の時間間隔で繰り返し実行されます。

以下のコードブロックでは、Timer インスタンスを作成しました。インスタンス変数の使用は、将来のイベントをスケジュールするメソッド scheduleAtFixedRate メソッドを呼び出すことです。このメソッドにはさまざまな実装があります。使用したものは 3つのパラメーターを取ります。まず、TimerTask インスタンスは、将来実行したいアクションに関連するステートメントを保持します。次に、delay 変数は、タスクまたはイベントの実行にかかる時間を定義します。最後は、イベントの連続する呼び出し間の時間を定義する period です。このメソッドは、NullPointerException IllegalArgument および IllegalState 例外を含む例外をスローします。

import java.util.Timer;
import java.util.TimerTask;

public class RepeatedTimer {
  public static void main(String[] args) {
    Timer timer = new Timer();
    System.out.println("Stop Watch Started.");
    timer.scheduleAtFixedRate(new RepeatedTask(), 500, 1000);
  }

  static class RepeatedTask extends TimerTask {
    public void run() {
      System.out.println("Running!");
    }
  }
}

以下は、予定されている将来のイベントの終わりのない結果です。

Running!
Running!
Running!
Running!
著者: Rashmi Patidar
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

関連記事 - Java Timer