java.util.Timerで周期起動タスク

Javaプログラムで何らかの仕事を周期的にやろうとする時にはjava.util.Timerとjava.util.TimerTaskというクラスを利用することができます。java.util.Timerはいわゆるタイマ機能を提供します。タイムアウトした時に希望するタスクを別スレッドで実行することが出来ます。タイムアウトは1回きりのものでも、周期起動させるものでもOKです。java.util.Timerクラスでスケジュールされるタスクは、java.util.TimerTaskのサブクラスにする必要があります。java.util.Timerタスクで提供されるタイマ機能はリアルタイム性こそ保証されませんが、処理に時間が掛かりすぎるスレッドを停止させたりする機能等もあるので、広範な利用が可能だと思われます。以下に簡単なサンプルを書いてみます。

まずスケジュールされるタスクを書いてみます。安直ですが標準出力に"Hello world"を表示するというタスクにしてみます。java.util.TimerTaskを継承する必要があるので、以下の様になります。

import java.util.TimerTask;

public class HelloWorldTask extends TimerTask {
	public void run() {
		System.out.println("Hello World");
	}
}
run()メソッドはjava.util.TimerTaskクラスでシグネチャだけ用意されているメソッドで、動かしたいタスクの実態をここに記述します。

さて、このHellowWorldTaskを5秒毎に動かすクラスを用意してみます。java.util.Timerクラスには何種類課のscheduleメソッドが用意されていますので、一番フィットするものを選んで使用します。

import java.util.Timer;

public class PeriodicHello {
	public static void main(String[] args) {
		Timer timer = new Timer();
		timer.schedule(new HelloWorldTask(), 1000, 5000);
	}
}
ここではHelloWorldTaskを1000ミリ秒後に起動し、以後5000ミリ秒毎に繰り返す様に指定してみました。他にDateオブジェクトを使って指定した日時に起動する、といったこともできます。


人材開発室 PoisonSoft