モジュール java.base
パッケージ java.util

クラスTimer

java.lang.Object
java.util.Timer

public class Timer extends Object
バックグラウンド・スレッドで将来実行されるタスクをスケジュールする、スレッドのための機能です。 タスクは、1回だけ、または定期的に繰返し実行されるようにスケジュールされます。

Timerオブジェクトに対応する単一のバックグラウンド・スレッドは、タイマーのすべてのタスクを順番に実行するために使用されます。 タイマー・タスクは迅速に実行される必要があります。 タイマー・タスクの完了に時間がかかりすぎると、タイマーのタスク実行スレッドが「占有」されます。 これにより後続のタスクの実行が遅れ、違反したタスクの完了時(完了した場合)に、立て続けに「まとめて」実行されることになります。

Timerオブジェクトに対する最後のライブ参照がなくなり、すべての未処理タスクの実行が完了すると、タイマーのタスク実行スレッドは(ガベージ・コレクションの対象になります)を正常に終了します。 ただし、これには限りなく長い時間がかかる場合があります。 デフォルトでは、タスクの実行スレッドはデーモン・スレッドとしては実行されないため、アプリケーションが終了しないようにできます。 呼出し元がタイマーのタスク実行スレッドを迅速に終了する場合、その呼出し元はタイマーのcancelメソッドを呼び出す必要があります。

タイマーのタスク実行スレッドが予期せず終了した場合(たとえば、stopメソッドが呼び出されたため)、タイマーでタスクをスケジュールしようとすると、タイマーのcancelメソッドが呼び出されたかのように、IllegalStateExceptionになります。

このクラスはスレッド・セーフです: 外部同期を必要とせずに、複数のスレッドで単一のTimerオブジェクトを共有できます。

このクラスはリアルタイム保証を提供していません: Object.wait(long)メソッドを使用してタスクをスケジュールします。

APIのノート:
Java 5.0ではjava.util.concurrentパッケージが導入されましたが、その中の並行性ユーティリティの1つがScheduledThreadPoolExecutorで、これは特定のレートまたは遅延で繰返し実行されるタスクのスレッド・プールです。 実際、これは複数のサービス・スレッドを許可し、さまざまな時間単位を受け入れ、TimerTaskのサブクラス化を必要としない(Runnableを実装するだけでよい)ため、TimerTimerTaskの組み合わせに代わる、より柔軟性の高いユーティリティです。 ScheduledThreadPoolExecutorを1つのスレッドで構成すると、Timerと同じになります。
実装上のノート:
このクラスは、多数の同時スケジュール済タスク(数千人が問題なし)にスケーリングされます。 タスク・キューを表すためにバイナリ・ヒープが内部的に使用されるため、タスクをスケジュールするコストはO(log n)になります。nは、並行してスケジュールされたタスクの数です。

すべてのコンストラクタがタイマー・スレッドを起動します。

導入されたバージョン:
1.3
関連項目: