HOWTO · Java

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!