はじめに
Java のTimerとTimerTaskは、将来のタスクをスケジュールするために使用されます。TimerTaskは、Runnableインターフェイスを実装する抽象クラスであり、Timerクラスでタスクをスケジュールするのに役立ちます。TimerTaskクラスを使ってタスクを定義し、Timerクラスを使ってそれをスケジュールできます。Timerは、タスクのスケジュールにバックグラウンドスレッドを使用します。
必要なパッケージをインポートする
次のコードを使用して、TimerとTimerTaskに必要なパッケージをインポートします。
import java.util.Timer;
import java.util.TimerTask;
TimerTask を使用してタスクを作成する
TimerTask クラスを使って実行するタスクを作成します。実行するタスクを定義するには、run() メソッドをオーバーライドします。たとえば、「Hello, World!」と表示するタスクを次のように作成できます。
TimerTask task = new TimerTask() {
public void run() {
System.out.println("Hello, World!");
}
};
Timer オブジェクトを作成する
次のコードを使用して Timer オブジェクトを作成します。
Timer timer = new Timer();
Timer を使ってタスクをスケジュールする
タスクをスケジュールするには、Timer クラスの schedule() メソッドを使用します。たとえば、1000 ミリ秒(1 秒)後にタスクを実行したい場合、次のコードを使用できます。
timer.schedule(task, 1000);
これにより、1 秒の遅延後にタスクが実行されるようにスケジュールされます。
繰り返し実行するタスクをスケジュールする
ディレイと周期をパラメータとして schedule() メソッドを使用することで、繰り返し実行するタスクをスケジュールすることもできます。次の例では、1 秒のディレイ後に始まり、2 秒ごとに「Hello, World!」と表示するタスクをスケジュールしています。
timer.schedule(task, 1000, 2000);
タスクをキャンセルする
TimerTask クラスの cancel() メソッドを使用して、予定されたタスクをキャンセルすることもできます。次の例では、タスクが一度だけ実行された後にキャンセルされるように予定されています。
TimerTask task = new TimerTask() {
public void run() {
System.out.println("Task is being executed...");
cancel();
}
};
timer.schedule(task, 1000);
scheduleAtFixedRate() メソッドを使用する
前回の実行の完了時間に関係なく、一定の間隔でタスクを実行するようにスケジュールするには、scheduleAtFixedRate() メソッドを使用できます。たとえば、次のコードを使用して、タスクの実行にかかる時間に関係なく、2 秒ごとに「Hello, World!」と表示するタスクをスケジュールできます。
timer.scheduleAtFixedRate(task, 1000, 2000);
ExecutorService を使用する
ExecutorService を使用して TimerTask オブジェクトをスケジュールできます。ここでは、ScheduledExecutorService を使用してタスクをスケジュールします。たとえば、次のコードを使用して、2 秒ごとに「Hello, World!」と表示するタスクを作成できます。
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(task, 1000, 2000, TimeUnit.MILLISECONDS);
コードをコンパイルして実行する
最後に、ターミナルで次のコマンドを使用してコードをコンパイルして実行します。
javac TimerTaskDemo.java && java TimerTaskDemo
まとめ
この実験では、Java の Timer と TimerTask を使用して、特定の時刻または遅延でタスクをスケジュールして実行する方法を学びました。また、タスクを繰り返し実行するスケジュールを設定する方法、タスクをキャンセルする方法、scheduleAtFixedRate()メソッドを使用する方法、およびExecutorServiceを使用してTimerTaskオブジェクトをスケジュールする方法についても学びました。



