JavaTM 2 Platform
Standard Ed. 5.0

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) メソッドを使用して、タスクがスケジュールされます。

実装上の注意: このクラスは、同時にスケジュールされた多数のタスクをスケーリングします (数千でも問題はない)。タスクキューを表すためにバイナリヒープが内部的に使用されるため、タスクをスケジュールするコストは O(log n) になります。n は、同時にスケジュールされたタスクの数です。

実装上の注意: すべてのコンストラクタはタイマースレッドを開始します。

導入されたバージョン:
1.3
関連項目:
TimerTask, Object.wait(long)

コンストラクタの概要
Timer()
          新しいタイマーを作成します。
Timer(boolean isDaemon)
          デーモンとして実行されるように指定できる関連スレッドを持つ、新しいタイマーが作成されます。
Timer(String name)
          指定された名前の関連するスレッドを持つ新しいタイマーが作成されます。
Timer(String name, boolean isDaemon)
          指定された名前の関連するスレッドを持つ新しいタイマーが作成されます。
 
メソッドの概要
 void cancel()
          現在スケジュールされているタスクを破棄して、このタイマーを終了します。
 int purge()
          取り消されたすべてのタスクを、このタイマーのタスクキューから削除します。
 void schedule(TimerTask task, Date time)
          指定した時間に指定したタスクが実行されるようスケジュールします。
 void schedule(TimerTask task, Date firstTime, long period)
          指定したタスクが、指定した時間に開始され、「固定遅延実行」を繰り返すようにスケジュールします。
 void schedule(TimerTask task, long delay)
          指定した遅延のあとに、指定したタスクが実行されるようスケジュールします。
 void schedule(TimerTask task, long delay, long period)
          指定したタスクが、指定した遅延のあとに開始され、「固定遅延実行」を繰り返すようにスケジュールします。
 void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
          指定したタスクが、指定した時間に開始され、「固定頻度実行」を繰り返すようにスケジュールします。
 void scheduleAtFixedRate(TimerTask task, long delay, long period)
          指定したタスクが、指定した遅延のあとに開始され、「固定頻度実行」を繰り返すようにスケジュールします。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

Timer

public Timer()
新しいタイマーを作成します。関連するスレッドは、デーモンとしては実行されません。

関連項目:
Thread, cancel()

Timer

public Timer(boolean isDaemon)
デーモンとして実行されるように指定できる関連スレッドを持つ、新しいタイマーが作成されます。デーモンスレッドは、タイマーが「保守作業」の繰り返しをスケジュールするために使用される場合に呼び出されます。これは、アプリケーションが実行されている間実行される必要がありますが、アプリケーションの寿命を引き延ばすことはできません。

パラメータ:
isDaemon - 関連するスレッドがデーモンとして実行される場合は true
関連項目:
Thread, cancel()

Timer

public Timer(String name)
指定された名前の関連するスレッドを持つ新しいタイマーが作成されます。関連するスレッドは、デーモンとしては実行されません。

パラメータ:
name - 関連するスレッドの名前
例外:
NullPointerException - 名前が null の場合
導入されたバージョン:
1.5
関連項目:
Thread.getName(), Thread.isDaemon()

Timer

public Timer(String name,
             boolean isDaemon)
指定された名前の関連するスレッドを持つ新しいタイマーが作成されます。関連するスレッドは、デーモンとしての実行が指定される場合があります。

パラメータ:
name - 関連するスレッドの名前
isDaemon - 関連するスレッドがデーモンとして実行される場合は true
例外:
NullPointerException - 名前が null の場合
導入されたバージョン:
1.5
関連項目:
Thread.getName(), Thread.isDaemon()
メソッドの詳細

schedule

public void schedule(TimerTask task,
                     long delay)
指定した遅延のあとに、指定したタスクが実行されるようスケジュールします。

パラメータ:
task - スケジュールされるタスク
delay - タスクが実行される前のミリ秒単位の遅延
例外:
IllegalArgumentException - delay が負の値の場合、または delay + System.currentTimeMillis() が負の値の場合
IllegalStateException - タスクがすでにスケジュールされたか取り消された場合、またはタイマーが取り消された場合

schedule

public void schedule(TimerTask task,
                     Date time)
指定した時間に指定したタスクが実行されるようスケジュールします。過去の時間を指定すると、タスクはただちに実行されるようスケジュールされます。

パラメータ:
task - スケジュールされるタスク
time - タスクが実行される時間
例外:
IllegalArgumentException - time.getTime() が負の値の場合
IllegalStateException - タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合

schedule

public void schedule(TimerTask task,
                     long delay,
                     long period)
指定したタスクが、指定した遅延のあとに開始され、「固定遅延実行」を繰り返すようにスケジュールします。そのあとは、指定した期間とは別に、ほぼ一定の間隔で実行されます。

固定遅延実行では、前の実行の実際の実行時間を基準にしてそれぞれの実行がスケジュールされます。何らかの理由で実行が遅延した場合 (ガベージコレクション、その他のバックグラウンド作業など)、そのあとの実行も遅延されます。最終的に、実行の頻度は通常、指定した期間の対応する頻度よりも若干遅くなります (基本となる Object.wait(long) を支えているシステムクロックが正確という前提で)。

固定遅延実行は、「円滑さ」を必要とする作業の繰り返しに適しています。つまり、長時間の実行よりも短時間の実行で頻度の正確さを維持する必要のある作業に適しています。これには、一定の間隔でカーソルを点滅させるなど、ほとんどのアニメーションタスクが含まれます。また、キーが押されている間は文字を自動的に繰り返すなど、ユーザの入力に応じて一定の活動が実行されるタスクも含まれます。

パラメータ:
task - スケジュールされるタスク
delay - タスクが実行される前のミリ秒単位の遅延
period - 連続するタスク実行のミリ秒単位の時間
例外:
IllegalArgumentException - delay が負の値の場合、または delay + System.currentTimeMillis() が負の値の場合
IllegalStateException - タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合

schedule

public void schedule(TimerTask task,
                     Date firstTime,
                     long period)
指定したタスクが、指定した時間に開始され、「固定遅延実行」を繰り返すようにスケジュールします。そのあとは、指定した期間とは別に、ほぼ一定の間隔で実行されます。

固定遅延実行では、前の実行の実際の実行時間を基準にしてそれぞれの実行がスケジュールされます。何らかの理由で実行が遅延した場合 (ガベージコレクション、その他のバックグラウンド作業など)、そのあとの実行も遅延されます。最終的に、実行の頻度は通常、指定した期間の対応する頻度よりも若干遅くなります (基本となる Object.wait(long) を支えているシステムクロックが正確という前提で)。

固定遅延実行は、「円滑さ」を必要とする作業の繰り返しに適しています。つまり、長時間の実行よりも短時間の実行で頻度の正確さを維持する必要のある作業に適しています。これには、一定の間隔でカーソルを点滅させるなど、ほとんどのアニメーションタスクが含まれます。また、キーが押されている間は文字を自動的に繰り返すなど、ユーザの入力に応じて一定の活動が実行されるタスクも含まれます。

パラメータ:
task - スケジュールされるタスク
firstTime - タスクが実行される最初の時間
period - 連続するタスク実行のミリ秒単位の時間
例外:
IllegalArgumentException - time.getTime() が負の値の場合
IllegalStateException - タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合

scheduleAtFixedRate

public void scheduleAtFixedRate(TimerTask task,
                                long delay,
                                long period)
指定したタスクが、指定した遅延のあとに開始され、「固定頻度実行」を繰り返すようにスケジュールします。そのあとは、指定した期間とは別に、ほぼ一定の間隔で実行されます。

固定頻度実行では、最初の実行のスケジュールされた実行時間を基準にしてそれぞれの実行がスケジュールされます。何らかの理由で実行が遅延した場合 (ガベージコレクションまたはその他のバックグラウンド作業など)、「遅れを取り戻す」ために 2 つ以上の実行が連続して行われます。最終的に実行の頻度は、指定した期間の対応する頻度と同じになります (基本となる Object.wait(long) を支えているシステムクロックが正確という前提で)。

固定頻度実行は、1 時間ごとにチャイムを鳴らしたり、特定の時間に毎日スケジュールされた保守を実行するなど、「絶対」時間を反映する作業を繰り返すのに適しています。また、10 秒ごとに刻まれるカウントダウンタイマーなど、決まった数の実行の合計時間が重要な作業を繰り返すのにも適しています。さらに、固定頻度実行は、相互に同期化を保持する必要がある複数の繰り返しタイマータスクをスケジュールするのにも適しています。

パラメータ:
task - スケジュールされるタスク
delay - タスクが実行される前のミリ秒単位の遅延
period - 連続するタスク実行のミリ秒単位の時間
例外:
IllegalArgumentException - delay が負の値の場合、または delay + System.currentTimeMillis() が負の値の場合
IllegalStateException - タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合

scheduleAtFixedRate

public void scheduleAtFixedRate(TimerTask task,
                                Date firstTime,
                                long period)
指定したタスクが、指定した時間に開始され、「固定頻度実行」を繰り返すようにスケジュールします。そのあとは、指定した期間とは別に、ほぼ一定の間隔で実行されます。

固定頻度実行では、最初の実行のスケジュールされた実行時間を基準にしてそれぞれの実行がスケジュールされます。何らかの理由で実行が遅延した場合 (ガベージコレクションまたはその他のバックグラウンド作業など)、「遅れを取り戻す」ために 2 つ以上の実行が連続して行われます。最終的に実行の頻度は、指定した期間の対応する頻度と同じになります (基本となる Object.wait(long) を支えているシステムクロックが正確という前提で)。

固定頻度実行は、1 時間ごとにチャイムを鳴らしたり、特定の時間に毎日スケジュールされた保守を実行するなど、「絶対」時間を反映する作業を繰り返すのに適しています。また、10 秒ごとに刻まれるカウントダウンタイマーなど、決まった数の実行の合計時間が重要な作業を繰り返すのにも適しています。さらに、固定頻度実行は、相互に同期化を保持する必要がある複数の繰り返しタイマータスクをスケジュールするのにも適しています。

パラメータ:
task - スケジュールされるタスク
firstTime - タスクが実行される最初の時間
period - 連続するタスク実行のミリ秒単位の時間
例外:
IllegalArgumentException - time.getTime() が負の値の場合
IllegalStateException - タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合

cancel

public void cancel()
現在スケジュールされているタスクを破棄して、このタイマーを終了します。現在実行中のタスク (ある場合) には干渉しません。タイマーが終了すると、実行スレッドも同時に終了し、タスクはスケジュールされなくなります。

このタイマーによって呼び出されたタイマータスクの実行メソッドからこのメソッドを呼び出すと、進行中のタスク実行は、このタイマーで実行される最後のタスク実行になります。

このメソッドは、繰り返し呼び出されます。2 回目以降の呼び出しには、効果はありません。


purge

public int purge()
取り消されたすべてのタスクを、このタイマーのタスクキューから削除します。このメソッドを呼び出してもタイマーの動作は影響を受けませんが、取り消されたタスクへの参照をキューから排除します。これらのタスクへの外部参照が存在しない場合、タスクはガベージコレクションの対象となります。

大半のプログラムは、このメソッドを呼び出す必要はありません。このメソッドを使用するのは、多数のタスクを取り消す必要のあるアプリケーションであり、そのようなアプリケーションはめったに存在しません。このメソッドを呼び出すと、処理時間よりメモリ効率が優先されるため、メソッドのランタイムが n + c log n に比例する場合があります。ここで、n はキュー内のタスクの数、c は取り消されたタスクの数を表します。

このタイマーでスケジュールされたタスク内から、このメソッドを呼び出すことができます。

戻り値:
キューから削除されたタスクの数
導入されたバージョン:
1.5

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。