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, 2014, Oracle and/or its affiliates. All rights reserved.