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

Java 5.0ではjava.util.concurrentパッケージが導入されましたが、その中の並行性ユーティリティの1つがScheduledThreadPoolExecutorで、これは特定のレートまたは遅延で繰返し実行されるタスクのスレッド・プールです。 実際、これは複数のサービス・スレッドを許可し、さまざまな時間単位を受け入れ、TimerTaskのサブクラス化を必要としない(Runnableを実装するだけでよい)ため、TimerTimerTaskの組み合わせに代わる、より柔軟性の高いユーティリティです。 ScheduledThreadPoolExecutorを1つのスレッドで構成すると、Timerと同じになります。

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

実装にあたってのノート: すべてのコンストラクタはタイマー・スレッドを開始します。

導入されたバージョン:
1.3
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    新しいタイマーを作成します。
    Timer(boolean isDaemon)
    デーモンとして実行されるように指定できる関連スレッドを持つ、新しいタイマーを作成します。
    Timer(String name)
    指定された名前の関連するスレッドを持つ新しいタイマーが作成されます。
    Timer(String name, boolean isDaemon)
    デーモンとして実行されるように指定できる、指定された名前の関連するスレッドを持つ、新しいタイマーを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    現在スケジュールされているタスクを破棄して、このタイマーを終了します。
    int
    取り消されたすべてのタスクを、このタイマーのタスク・キューから削除します。
    void
    schedule(TimerTask task, long delay)
    指定した遅延のあとに、指定したタスクが実行されるようスケジュールします。
    void
    schedule(TimerTask task, long delay, long period)
    指定したタスクが、指定した遅延のあとに開始され、固定遅延実行を繰り返すようにスケジュールします。
    void
    schedule(TimerTask task, Date time)
    指定した時間に指定したタスクが実行されるようスケジュールします。
    void
    schedule(TimerTask task, Date firstTime, long period)
    指定したタスクが、指定した時間に開始され、固定遅延実行を繰り返すようにスケジュールします。
    void
    scheduleAtFixedRate(TimerTask task, long delay, long period)
    指定したタスクが、指定した遅延のあとに開始され、固定頻度実行を繰り返すようにスケジュールします。
    void
    scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
    指定したタスクが、指定した時間に開始され、固定頻度実行を繰り返すようにスケジュールします。

    クラスjava.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • Timer

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

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

      public Timer(String name)
      指定された名前の関連するスレッドを持つ新しいタイマーが作成されます。 関連するスレッドは、デーモンとして実行されません
      パラメータ:
      name - 関連するスレッドの名前
      例外:
      NullPointerException - nameがnullである場合
      導入されたバージョン:
      1.5
    • Timer

      public Timer(String name, boolean isDaemon)
      デーモンとして実行されるように指定できる、指定された名前の関連するスレッドを持つ、新しいタイマーを作成します。
      パラメータ:
      name - 関連するスレッドの名前
      isDaemon - 関連するスレッドがデーモンとして実行される場合はtrue
      例外:
      NullPointerException - nameがnullである場合
      導入されたバージョン:
      1.5
  • メソッドの詳細

    • schedule

      public void schedule(TimerTask task, long delay)
      指定した遅延のあとに、指定したタスクが実行されるようスケジュールします。
      パラメータ:
      task - スケジュールされるタスク。
      delay - タスクが実行される前のミリ秒単位の遅延。
      例外:
      IllegalArgumentException - delayが負の場合、またはdelay + System.currentTimeMillis()が負の場合。
      IllegalStateException - タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマー・スレッドが終了した場合
      NullPointerException - taskがnullである場合
    • schedule

      public void schedule(TimerTask task, Date time)
      指定した時間に指定したタスクが実行されるようスケジュールします。 過去の時間を指定すると、タスクはただちに実行されるようスケジュールされます。
      パラメータ:
      task - スケジュールされるタスク。
      time - タスクが実行される時間。
      例外:
      IllegalArgumentException - time.getTime()が負の場合。
      IllegalStateException - タスクがすでにスケジュールされたか取り消された場合、タイマーが取り消された場合、またはタイマー・スレッドが終了した場合
      NullPointerException - taskまたはtimeがnullである場合
    • schedule

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

      固定遅延実行では、前の実行の実際の実行時間を基準にしてそれぞれの実行がスケジュールされます。 何らかの理由で実行が遅延した場合(ガベージ・コレクション、その他のバックグラウンド作業など)、そのあとの実行も遅延されます。 長時間実行では、通常、実行頻度は指定した期間(Object.wait(long)の基礎となるシステム・クロックが正確であると仮定)の逆数よりわずかに低くなります。

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

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

      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である場合
    • scheduleAtFixedRate

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

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

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

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

      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である場合
    • cancel

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

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

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

    • purge

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

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

      このタイマーでスケジュールされたタスク内からこのメソッドを呼び出すことは許可されています。

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