Java Timer, TimerTask, samouczek klasy Reminder z przykładem

Opublikowany: 2021-02-04
Java Timer, TimerTask, samouczek klasy Reminder z przykładem

java.util.Timer to klasa narzędziowa, której można użyć do zaplanowania wykonania wątku w określonym czasie w przyszłości. Klasa Java Timer może służyć do planowania zadania do jednorazowego uruchomienia lub do wykonywania w regularnych odstępach czasu.

java.util.TimerTask jest klasą abstrakcyjną, która implementuje interfejs Runnable i musimy ją rozszerzyć, aby utworzyć własny TimerTask, który można zaplanować za pomocą klasy Java Timer .

Klasa Timer jest bezpieczna dla wątków, a wiele wątków może współużytkować jeden obiekt Timer bez potrzeby zewnętrznej synchronizacji. Klasa Timer używa java.util.TaskQueue do dodawania zadań w określonych odstępach czasu i w dowolnym momencie może być tylko jeden wątek uruchamiający TimerTask, na przykład jeśli tworzysz Timer, który będzie uruchamiany co 10 sekund, ale wykonanie pojedynczego wątku zajmuje 20 sekund, wtedy obiekt Timer będzie kontynuował dodawanie zadań do kolejki i jak tylko jeden wątek zostanie zakończony, powiadomi o tym kolejkę i rozpocznie się wykonywanie innego wątku.

Klasa czasomierza Java

Klasa Timer używa Object Wait i Notify do planowania zadań. TimerTask jest abstract class i dziedziczymy ją, aby zapewnić konkretną implementację. Klasa TimerTask implements interface Runnable , więc jest to wątek, a zatem twoja implementacja TimerTask również jest wątkiem.

Bardzo prosty Timer i TimerTask Przykład: Zadanie jest wykonywane po upływie 5 seconds .

Wynik:

Ten prosty program ilustruje następujące podstawowe części implementacji i planowania zadania do wykonania przez wątek czasomierza:

  • Zaimplementuj niestandardową podklasę TimerTask . Metoda run zawiera kod, który wykonuje zadanie. W tym przykładzie podklasa nosi nazwę CrunchifyReminder.
  • Utwórz wątek, tworząc wystąpienie klasy Timer .
  • Utwórz wystąpienie obiektu TimerTask ( new CrunchifyReminder() ).
  • Zaplanuj wykonanie zadania czasomierza.

Jak mogę wielokrotnie wykonywać to TimerTask?

Wynik:

Domyślnie program działa tak długo, jak działają jego wątki czasomierza. Możesz zakończyć wątek z zegarem na cztery sposoby:

  • Wywołaj cancel na zegarze. Możesz to zrobić z dowolnego miejsca w programie, na przykład z metody run zadania czasomierza.
  • Uczyń wątek licznika „demonem”, tworząc licznik czasu w ten sposób: new Timer(true) . Jeśli jedynymi wątkami pozostałymi w programie są wątki demonów, program zostanie zakończony.
  • Po zakończeniu wykonywania wszystkich zaplanowanych zadań czasomierza usuń wszystkie odwołania do obiektu Timer . W końcu wątek czasomierza zostanie zakończony.
  • Wywołaj metodę System.exit , która powoduje zakończenie całego programu (i wszystkich jego wątków).