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!