Java Timer, TimerTask, tutoriel de classe de rappel avec exemple

Publié: 2021-02-04
Java Timer, TimerTask, tutoriel de classe de rappel avec exemple

java.util.Timer est une classe utilitaire qui peut être utilisée pour planifier l'exécution d'un thread à un certain moment dans le futur. La classe Java Timer peut être utilisée pour programmer une tâche à exécuter une seule fois ou à exécuter à intervalles réguliers.

java.util.TimerTask est une classe abstraite qui implémente l'interface Runnable et nous devons étendre cette classe pour créer notre propre TimerTask qui peut être planifiée à l'aide de la classe Java Timer .

La classe Timer est thread-safe et plusieurs threads peuvent partager un seul objet Timer sans avoir besoin de synchronisation externe. La classe Timer utilise java.util.TaskQueue pour ajouter des tâches à un intervalle régulier donné et à tout moment, il ne peut y avoir qu'un seul thread exécutant TimerTask, par exemple si vous créez un Timer à exécuter toutes les 10 secondes mais que l'exécution d'un seul thread prend 20 secondes, alors l'objet Timer continuera d'ajouter des tâches à la file d'attente et dès qu'un thread sera terminé, il notifiera la file d'attente et un autre thread commencera à s'exécuter.

Classe de minuterie Java

La classe Timer utilise les méthodes d'attente et de notification d'objet pour planifier les tâches. TimerTask est une abstract class et nous en héritons pour fournir une implémentation concrète. La classe TimerTask implements l' interface Runnable , c'est donc un thread et donc votre implémentation de TimerTask est également un thread.

Timer et TimerTask très simples Exemple : La tâche s'exécute une fois que 5 seconds se sont écoulées.

Résultat:

Ce programme simple illustre les parties de base suivantes de l'implémentation et de la planification d'une tâche à exécuter par un thread de minuterie :

  • Implémentez une sous-classe personnalisée de TimerTask . La méthode run contient le code qui exécute la tâche. Dans cet exemple, la sous-classe est nommée CrunchifyReminder.
  • Créez un thread en instanciant la classe Timer .
  • Instanciez l'objet TimerTask ( new CrunchifyReminder() ).
  • Planifiez l'exécution de la tâche du minuteur.

Comment puis-je effectuer cette TimerTask à plusieurs reprises ?

Résultat:

Par défaut, un programme continue de s'exécuter tant que ses threads de minuterie sont en cours d'exécution. Vous pouvez terminer un thread de minuterie de quatre manières :

  • Invoquez l' cancel sur la minuterie. Vous pouvez le faire à partir de n'importe où dans le programme, par exemple à partir de la méthode d' run d'une tâche de minuteur.
  • Transformez le thread du minuteur en « démon » en créant le minuteur comme ceci : new Timer(true) . Si les seuls threads restants dans le programme sont des threads démons, le programme se ferme.
  • Une fois l'exécution de toutes les tâches planifiées du minuteur terminée, supprimez toutes les références à l'objet Timer . Finalement, le thread du minuteur se terminera.
  • Appelez la méthode System.exit , qui fait sortir tout le programme (et tous ses threads).