TimerおよびTimerTaskクラス
java.utilが提供する興味深い便利な機能は、将来の特定の時間にタスクをスケジュールする機能です。この機能をサポートするクラスは、TimerとTimerTaskです。これらのクラスを使用すると、バックグラウンドで実行され、特定の瞬間を待つスレッドを作成できます。時間が来ると、スレッドにリンクされているタスクが実行されます。特定の期間中に繰り返し実行および実行されるタスクをスケジュールするために使用できるさまざまなオプションがあります。Threadクラスを使用すると、特定の時間に実行するタスクをいつでも手動で作成できますが、TimerおよびTimerTaskはこのプロセスを大幅に簡略化します。
TimerとTimerTaskは連携して動作します。Timerクラスは、タスクをスケジュールするために使用されます。スケジュールされたタスクは、TimerTaskクラスのインスタンスである必要があります。したがって、タスクをスケジュールするには、最初にTimerTaskオブジェクトを作成してから、Timerインスタンスを使用してタスクの実行をスケジュールする必要があります。
TimerTaskはRunnableインターフェースを実装しているため、実行用のスレッドを作成するために使用できます。TimerTaskのコンストラクタは次のとおりです。
protected TimerTask()
表1は、TimerTaskクラスによって定義されるメソッドを示しています。run()メソッドは抽象的であるため、書き換える必要があることに注意してください。run()メソッドには、実行されるコードが含まれています。このメソッドは、Runnableインターフェースによって定義されます。したがって、時間指定タスクを作成する最も簡単な方法は、TimerTaskクラスを拡張し、run()メソッドをオーバーライドすることです。
方法 | 描 述 |
---|---|
boolean cancel() | タスクを終了します。タスクが正常にブロックされた場合はtrue、それ以外の場合はfalse |
抽象void run() | スケジュールされたタスクのコードが含まれています |
longchedExecutionTime() | スケジュールされたタスクが最後に実行された時刻を返します |
タスクを作成した後、Timerクラスオブジェクトを使用して、タスクの実行をスケジュールできます。Timerクラスのコンストラクタは次のとおりです。
Timer()
Timer(boolean DThread)
Timer(String tName)
Timer(String tName,boolean DThread)
最初のバージョンで作成されたTimerオブジェクトは、通常のスレッドとして実行されます。2番目のバージョンでは、DThreadがtrueの場合、デーモンスレッドが実行されます。プログラムの残りの部分が実行され続ける限り、デーモンスレッドが実行されます。3番目と4番目のバージョンでは、タイマースレッドの名前を指定できます。表2は、Timerクラスによって定義されるメソッドを示しています。
方法 | 描 述 |
---|---|
void cancel() | タイマースレッドをキャンセル |
int purge() | キャンセルされたタスクをスケジュールされたタスクから削除する |
void schedule(TimerTask TTask、long wait) | TTaskは、パラメータwaitによって渡された期間の後に実行されるようにスケジュールされています。待機パラメータの単位はミリ秒です。 |
void schedule(TimerTask TTask、long wait、long repeat) | TTaskは、パラメータwaitによって渡された期間の後に実行されるようにスケジュールされ、タスクはrepeatで指定された時間間隔で繰り返し実行されます。待機および繰り返しパラメータの単位はミリ秒です |
void schedule(TimerTask TTask、Date targetTime) | TTaskは、targetTimeで指定された時間に実行されるようにスケジュールされています |
void schedule(TimeTask TTask、Date targetTime、long repeat) | TTaskは、targetTimeで指定された時間に実行されるようにスケジュールされ、タスクはrepeatで渡された間隔で繰り返し実行されます。繰り返しパラメータの単位はミリ秒です |
void scheduleAtFixedRate(TimerTask TTask、long wait、long repeat) | TTaskは、パラメータwaitによって渡された期間の後に実行されるようにスケジュールされ、タスクはrepeatで指定された時間間隔で繰り返し実行されます。待機および繰り返しパラメータの単位はミリ秒です。繰り返される各実行の時間は、前の実行の時間ではなく、最初の実行の時間に関連しているため、実行の全体的なレートは固定されています |
void scheduleAtFixedRate(TimerTask TTask、Date targetTime、long repeat) | TTaskは、targetTimeで指定された時間に実行されるようにスケジュールされ、タスクはrepeatで渡された間隔で繰り返し実行されます。repeatパラメータの単位はミリ秒です。繰り返される各実行の時間は、前回の実行の時間ではなく、最初の実行の時間に関連しているため、全体の実行速度は固定されています |
Timerオブジェクトを作成した後、作成したTimerオブジェクトでschedule()メソッドを呼び出して、タスクをスケジュールできます。表2に示すように、schedule()メソッドには多くの形式があり、タスクは複数の方法でスケジュールできます。
デーモン以外のタスクを作成する場合は、プログラムの終了時にキャンセル()メソッドを呼び出してタスクを終了する必要があります。これを行わないと、プログラムがしばらく中断される場合があります。
次のプログラムは、TimerクラスとTimerTaskクラスを示しています。プログラムはスケジュールされたタスクを定義し、タスクのrun()メソッドは「タイマータスクが実行されました」というメッセージを表示します。このタスクは、最初の1秒の遅延後に実行されるようにスケジュールされ、0.5秒ごとに実行されます。
//Demonstrate Timer and TimerTask.
import java.util.TimerTask;
class MyTimerTask extends TimerTask {
@Override
public void run() {
System.out.println("Timer task executed.");
}
}
import java.util.Timer;
class TTest {
public static void main(String[] args) {
MyTimerTask myTask = new MyTimerTask();
Timer myTimer = new Timer();
/*Set an initial delay of 1 second,
then repeat every half second.
*/
myTimer.schedule(myTask,1000,500);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
myTimer.cancel();
}
}