US

Timer

On va terminer ce chapitre en voyant comment réaliser des timers. Ce qu'on souhaite faire, c'est répéter une certaine tâche à intervalles réguliers. On a déjà vu une première technique pour ce faire au premier chapitre, en utilisant la méthode sleep pour endormir le thread durant un certain temps. On pourrait par exemple réaliser un timer ainsi :

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
public class SimpleTimer
{
    public static void main (String[] args)
    {
        try
        {
            boolean finished = false;
            while (! finished)
            {
                // Exécution de la tâche
 
                Thread.sleep (2000); // En pause pour deux secondes
            }
        }
        catch (InterruptedException exception){}
    }
}
Listing 3.13 Un exemple de timer avec la méthode sleep de la classe Thread.

Pour rappel, il ne faut pas utiliser une telle technique si vous souhaitez écrire une application temps-réel. En effet, le sleep (2000) arrêtera le programme pendant deux secondes, au minimum. Pour rappel, une fois ce délai écoulé, le thread revient dans l'état Runnable et ce n'est que lorsqu'il repassera dans l'état Running qu'il continuera à s'exécuter.

Les classes Timer et TimerTask

Il y a une classe prévue pour représenter des timers, dans la librairie standard Java. La classe java.util.Timer permet de commander l'exécution de tâches qui sont représentées par la classe java.util.TimerTask.

Programmer une tâche

La première chose à faire consiste à définir la tâche qu'il va falloir exécuter. Pour cela, il suffit de définir une nouvelle classe qui étend la classe TimerTask et qui redéfinit la méthode public void run() dans laquelle on va définir le comportement de la tâche.

Ensuite, il suffit de créer une instance de la classe Timer et d'y attacher la tâche à exécuter en utilisant la méthode schedule qui existe sous plusieurs formes. Avant de nous attarder là-dessus, voyons un exemple :

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
public class TimerExample
{
    public static void main (String[] args)
    {
        Timer timer = new Timer();
        timer.schedule (new TimerTask() {
            public void run()
            {
                System.out.printf ("%tR\n", new Date());
            }
        }, 0, 1000);
    }
}
Listing 3.13 Un exemple de timer avec la méthode sleep de la classe Thread.

La méthode schedule qu'on a utilisé prend trois paramètres. Le premier est la tâche à exécuter (instance de la classe TimerTask), le second est le temps qu'il faut attendre avant de démarrer le timer et enfin le dernier indique l'intervalle de temps auquel la tâche sera répétée.

La méthode schedule est surchargée et existe sous trois formes dont voici les signatures :

public void schedule (TimerTask task, Date time);
public void schedule (TimerTask task, Date firstTime, long period);
public void schedule (TimerTask task, long delay);
public void schedule (TimerTask task, long delay, long period);

Le paramètre delay représente un nombre de millisecondes qui sera attendu avant que le timer ne se mette en route. Le paramètre period indique l'intervalle de temps, en millisecondes, entre deux exécutions de la tâche. Enfin, le paramètres time (et firstTime) indique le temps auquel la première exécution aura lieu. Avec la méthode schedule, on pourra donc soit programmer l'exécution d'une tâche une seule fois, ou des exécutions répétées à intervalle régulier.

Avec la méthode schedule, pour un intervalle de temps de t, la tâche i + 1 est démarrée après t millisecondes, ce délai étant calculé à partir du moment où la tâche i s'est terminée. S'il y a du retard, par exemple parce que le garbage collector s'est exécuté, tout sera dès lors décalé. Pour éviter cela, on peut utiliser la méthode scheduleAtFixedRate qui va toujours compter les instants d'exécution par rapport au temps de démarrage de la première tâche.

public void scheduleAtFixedRate (TimerTask task, Date firstTime, long period);
public void scheduleAtFixedRate (TimerTask task, long delay, long period);

Annuler l'exécution d'une tâche

Pour annuler l'exécution des tâches, deux solutions sont envisageables. Dans les deux cas, on fait appel à la méthode cancel, mais on peut choisir celle de TimerTask ou celle de Timer. La première annule juste la tâche concernée tandis que la seconde annule toutes les tâches gérées par le timer concerné.

  • Espace membre
  • Learning Center
  • Les forums
  • Livre d'or
  • Imprimer
  • Boutique
  • Info
  • Règlement
  • Erreur
  • Newsletter

MyPagerank.Net

Firefox 3.6

Browse Happy logo

Open Clip Art Library

Join our Facebook Group

Twitter

Copyright © 2000-2012 UKO. Toute reproduction strictement interdite sans autorisation du webmaster

Valid XHTML 1.1 !
Valid CSS2 !
Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0
ICRA Internet Content Rating Association
Creative Commons License
Site optimisé pour Firefox avec une résolution 1024x768 --- Page chargée en 0.0388088 secondes --- This site uses Thumbshots previews