Javaタイマー、TimerTask、リマインダークラスのチュートリアルと例

公開: 2021-02-04
Javaタイマー、TimerTask、リマインダークラスのチュートリアルと例

java.util.Timerは、将来の特定の時間に実行されるスレッドをスケジュールするために使用できるユーティリティクラスです。 Java Timerクラスを使用して、タスクを1回だけ実行するか、定期的に実行するようにスケジュールできます。

java.util.TimerTaskは、Runnableインターフェースを実装する抽象クラスであり、このクラスを拡張して、 javaTimerクラスを使用してスケジュールできる独自のTimerTaskを作成する必要があります。

タイマークラスはスレッドセーフであり、複数のスレッドが外部同期を必要とせずに単一のタイマーオブジェクトを共有できます。 Timerクラスはjava.util.TaskQueueを使用して、指定された一定の間隔でタスクを追加します。たとえば、10秒ごとに実行するTimerを作成しているが、シングルスレッドの実行に20秒かかる場合、TimerTaskを実行できるスレッドは常に1つだけです。その後、Timerオブジェクトはキューにタスクを追加し続け、1つのスレッドが終了するとすぐにキューに通知し、別のスレッドが実行を開始します。

Javaタイマークラス

Timerクラスは、Objectwaitメソッドとnotifyメソッドを使用してタスクをスケジュールします。 TimerTaskはabstract classであり、具体的な実装を提供するためにそれを継承します。 TimerTaskクラスはRunnable interfaceimplementsしているため、スレッドであるため、TimerTaskの実装もスレッドです。

非常に単純なTimerおよびTimerTaskの例:タスクは5 secondsが経過すると実行されます。

結果:

この単純なプログラムは、タイマースレッドによって実行されるタスクの実装とスケジューリングの次の基本的な部分を示しています。

  • TimerTaskのカスタムサブクラスを実装します。 runメソッドには、タスクを実行するコードが含まれています。 この例では、サブクラスの名前はCrunchifyReminderです。
  • Timerクラスをインスタンス化してスレッドを作成します。
  • TimerTaskオブジェクトをインスタンス化します( new CrunchifyReminder() )。
  • タイマータスクを実行するようにスケジュールします。

このTimerTaskを繰り返し実行するにはどうすればよいですか?

結果:

デフォルトでは、プログラムはタイマースレッドが実行されている限り実行を続けます。 タイマースレッドは、次の4つの方法で終了できます。

  • タイマーでcancelを呼び出します。 これは、タイマータスクのrunメソッドなど、プログラムのどこからでも実行できます。
  • new Timer(true)のようにタイマーを作成して、タイマーのスレッドを「デーモン」にします。 プログラムに残っているスレッドがデーモンスレッドだけの場合、プログラムは終了します。
  • タイマーのスケジュールされたすべてのタスクの実行が終了したら、 Timerオブジェクトへのすべての参照を削除します。 最終的に、タイマーのスレッドは終了します。
  • System.exitメソッドを呼び出します。これにより、プログラム全体(およびそのすべてのスレッド)が終了します。