public class Timer extends Object
各 Timer オブジェクトと対応するのは、タイマーのタスクをすべて連続して実行するために使用される、単一のバックグラウンドスレッドです。タイマータスクは迅速に実行される必要があります。タイマータスクの完了に時間がかかりすぎると、タイマーのタスク実行スレッドが「占有」されます。これにより後続のタスクの実行が遅れ、違反したタスクの完了時 (完了した場合) に、立て続けに「まとめて」実行されることになります。
Timer オブジェクトの最後のライブ参照が終了し、かつ、未処理のタスクがすべて実行されると、タイマーのタスク実行スレッドは正常に終了し、ガベージコレクションの対象となります。ただし、これには限りなく長い時間がかかる場合があります。デフォルトでは、タスクの実行スレッドはデーモンスレッドとしては実行されないため、アプリケーションが終了しないようにできます。タイマーのタスク実行スレッドをただちに終了させる場合、呼び出し側はタイマーの cancel メソッドを呼び出す必要があります。
stop メソッドの呼び出しなどによりタイマーのタスク実行スレッドが予想外の時間に終了した場合、タイマーのタスクをスケジュールしようとすると、タイマーの cancel メソッドが呼び出された場合と同様に、IllegalStateException が発生します。
このクラスはスレッドセーフです。外部の同期化を行わなくても、複数のスレッドで単一の Timer オブジェクトを共有できます。
このクラスでは、リアルタイムは保証されません。Object.wait(long) メソッドを使用して、タスクがスケジュールされます。
Java 5.0 では java.util.concurrent
パッケージが導入されましたが、その中の並行性ユーティリティーの 1 つが ScheduledThreadPoolExecutor
で、これは特定のレートまたは遅延で繰り返し実行されるタスクのスレッドプールです。実際、これは複数のサービススレッドを許可し、さまざまな時間単位を受け入れ、TimerTask
のサブクラス化を必要としない (Runnable
を実装するだけでよい) ため、Timer
と TimerTask
の組み合わせに代わる、より柔軟性の高いユーティリティーです。ScheduledThreadPoolExecutor
を 1 つのスレッドで構成すると、Timer
と同じになります。
実装にあたっての注意:このクラスは、並行してスケジュールされた多数のタスクをスケーリングします (数千でも問題はない)。タスクキューを表すためにバイナリヒープが内部的に使用されるため、タスクをスケジュールするコストは O(log n) になります。 n は、並行してスケジュールされたタスクの数です。
実装にあたっての注意:すべてのコンストラクタはタイマースレッドを開始します。
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)
指定したタスクが、指定した遅延のあとに開始され、固定頻度実行を繰り返すようにスケジュールします。
|
public Timer()
public Timer(boolean isDaemon)
isDaemon
- 関連するスレッドがデーモンとして実行される場合は true。public Timer(String name)
name
- 関連するスレッドの名前NullPointerException
- name
が null である場合public Timer(String name, boolean isDaemon)
name
- 関連するスレッドの名前isDaemon
- 関連するスレッドがデーモンとして実行される場合は trueNullPointerException
- name
が null である場合public void schedule(TimerTask task, long delay)
task
- スケジュールされるタスク。delay
- タスクが実行される前のミリ秒単位の遅延。IllegalArgumentException
- delay が負の値の場合、または delay + System.currentTimeMillis() が負の値の場合。IllegalStateException
- タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合NullPointerException
- task
が null である場合public void schedule(TimerTask task, Date time)
task
- スケジュールされるタスク。time
- タスクが実行される時間。IllegalArgumentException
- time.getTime() が負の値の場合。IllegalStateException
- タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合NullPointerException
- task
または time
が null である場合public void schedule(TimerTask task, long delay, long period)
固定遅延実行では、前の実行の実際の実行時間を基準にしてそれぞれの実行がスケジュールされます。何らかの理由で実行が遅延した場合 (ガベージコレクション、その他のバックグラウンド作業など)、そのあとの実行も遅延されます。最終的に、実行の頻度は通常、指定した期間の対応する頻度よりも若干遅くなります (Object.wait(long) のベースにあるシステムクロックが正確であることが前提)。
固定遅延実行は、「円滑さ」を必要とする作業の繰り返しに適しています。つまり、長時間の実行よりも短時間の実行で頻度の正確さを維持する必要のある作業に適しています。これには、一定の間隔でカーソルを点滅させるなど、ほとんどのアニメーションタスクが含まれます。また、キーが押されている間は文字を自動的に繰り返すなど、ユーザーの入力に応じて一定の活動が実行されるタスクも含まれます。
task
- スケジュールされるタスク。delay
- タスクが実行される前のミリ秒単位の遅延。period
- 連続するタスクが実行されるミリ秒単位の間隔。IllegalArgumentException
- delay < 0
、delay + System.currentTimeMillis() < 0
、または period <= 0
の場合IllegalStateException
- タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合NullPointerException
- task
が null である場合public void schedule(TimerTask task, Date firstTime, long period)
固定遅延実行では、前の実行の実際の実行時間を基準にしてそれぞれの実行がスケジュールされます。何らかの理由で実行が遅延した場合 (ガベージコレクション、その他のバックグラウンド作業など)、そのあとの実行も遅延されます。最終的に、実行の頻度は通常、指定した期間の対応する頻度よりも若干遅くなります (Object.wait(long) のベースにあるシステムクロックが正確であることが前提)。上記の結果として、スケジュールされる最初の時間が過去の時間である場合、ただちに実行されるようスケジュールされます。
固定遅延実行は、「円滑さ」を必要とする作業の繰り返しに適しています。つまり、長時間の実行よりも短時間の実行で頻度の正確さを維持する必要のある作業に適しています。これには、一定の間隔でカーソルを点滅させるなど、ほとんどのアニメーションタスクが含まれます。また、キーが押されている間は文字を自動的に繰り返すなど、ユーザーの入力に応じて一定の活動が実行されるタスクも含まれます。
task
- スケジュールされるタスク。firstTime
- タスクが実行される最初の時間period
- 連続するタスクが実行されるミリ秒単位の間隔。IllegalArgumentException
- firstTime.getTime() < 0
または period <= 0
の場合IllegalStateException
- タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合NullPointerException
- task
または firstTime
が null である場合public void scheduleAtFixedRate(TimerTask task, long delay, long period)
固定頻度実行では、最初の実行のスケジュールされた実行時間を基準にしてそれぞれの実行がスケジュールされます。何らかの理由で実行が遅延した場合 (ガベージコレクションまたはその他のバックグラウンド作業など)、「遅れを取り戻す」ために 2 つ以上の実行が連続して行われます。最終的に、実行の頻度は指定した期間の対応する頻度と同じになります (Object.wait(long) のベースにあるシステムクロックが正確であることが前提)。
固定頻度実行は、1 時間ごとにチャイムを鳴らしたり、特定の時間に毎日スケジュールされた保守を実行するなど、絶対時間を反映する作業を繰り返すのに適しています。また、10 秒ごとに刻まれるカウントダウンタイマーなど、決まった数の実行の合計時間が重要な作業を繰り返すのにも適しています。さらに、固定頻度実行は、相互に同期化を保持する必要がある複数の繰り返しタイマータスクをスケジュールするのにも適しています。
task
- スケジュールされるタスク。delay
- タスクが実行される前のミリ秒単位の遅延。period
- 連続するタスクが実行されるミリ秒単位の間隔。IllegalArgumentException
- delay < 0
、delay + System.currentTimeMillis() < 0
、または period <= 0
の場合IllegalStateException
- タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合NullPointerException
- task
が null である場合public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
固定頻度実行では、最初の実行のスケジュールされた実行時間を基準にしてそれぞれの実行がスケジュールされます。何らかの理由で実行が遅延した場合 (ガベージコレクションまたはその他のバックグラウンド作業など)、「遅れを取り戻す」ために 2 つ以上の実行が連続して行われます。最終的に、実行の頻度は指定した期間の対応する頻度と同じになります (Object.wait(long) のベースにあるシステムクロックが正確であることが前提)。上記の結果として、スケジュールされる最初の時間が過去の時間である場合、実行が「間に合わなかった」ものがあればすべて「遅れを取り戻す」ためにただちに実行されるようスケジュールされます。
固定頻度実行は、1 時間ごとにチャイムを鳴らしたり、特定の時間に毎日スケジュールされた保守を実行するなど、絶対時間を反映する作業を繰り返すのに適しています。また、10 秒ごとに刻まれるカウントダウンタイマーなど、決まった数の実行の合計時間が重要な作業を繰り返すのにも適しています。さらに、固定頻度実行は、相互に同期化を保持する必要がある複数の繰り返しタイマータスクをスケジュールするのにも適しています。
task
- スケジュールされるタスク。firstTime
- タスクが実行される最初の時間period
- 連続するタスクが実行されるミリ秒単位の間隔。IllegalArgumentException
- firstTime.getTime() < 0
または period <= 0
の場合IllegalStateException
- タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマースレッドが終了した場合NullPointerException
- task
または firstTime
が null である場合public void cancel()
このタイマーによって呼び出されたタイマータスクの実行メソッドからこのメソッドを呼び出すと、進行中のタスク実行は、このタイマーで実行される最後のタスク実行になります。
このメソッドは、繰り返し呼び出されます。2 回目以降の呼び出しには、効果はありません。
public int purge()
大半のプログラムは、このメソッドを呼び出す必要はありません。これは、多数のタスクを取り消す、まれなアプリケーション用として設計されています。このメソッドを呼び出すと、処理時間よりメモリー効率が優先されるため、メソッドのランタイムが n + c log n に比例する場合があります。ここで、n はキュー内のタスクの数、c は取り消されたタスクの数を表します。
このタイマーでスケジュールされたタスク内から、このメソッドを呼び出すことができます。
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.