US

Interface Runnable

Terminons ce premier chapitre qui vous a introduit à la concurrence en Java en découvrant l'interface Runnable. Cette interface, qui se situe, tout comment la classe Thread, dans le package java.lang permet de représenter une tâche et on va pouvoir l'utiliser pour définir des threads.

L'interface Runnable contient une unique méthode run et représente une tâche. Le corps de la tâche est bien entendu défini par cette méthode run.

public void run();

Jusqu'à présent, pour créer un nouveau thread, on écrivait une nouvelle classe qui étendait la classe Thread. Cette manière de faire est tout à fait déconseillée pour plusieurs raisons. La première est liée au langage Java qui limite le nombre de classe qu'on peut étendre à une. On ne peut donc jamais étendre une autre classe puisqu'on étend déjà Thread. La seconde raison est liée au modèle orienté objets dans lequel on étend une classe pour modifier ou étendre les fonctionnalités de la classe étendue. Or, ici, on ne modifie ni n'étend les fonctionnalités des Thread et ce n'est donc pas propre point de vue programmation orientée objets de faire de la sorte. Enfin, on mélange divers concepts dans une même classe : la tâche et le thread d'exécution.

Pour pallier tous ces problèmes, on va définir la tâche dans une classe qui étend l'interface Runnable. On va ensuite créer un thread avec la classe Thread et le lier avec la tâche en utilisant deux autres constructeurs de Thread que voici :

public Thread (Runnable target);
public Thread (Runnable target, String name);

Voyons tout de suite un exemple pour se fixer les idées. La classe suivante représente un compteur qui va compter de un à dix. On écrit donc une classe qui implémente l'interface Runnable et on définit la méthode run. Rien à voir avec les threads, on a juste défini une classe qui représente une tâche.

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
public class Counter implements Runnable
{
    public void run()
    {
        for (int i = 1; i <= 10; i++)
        {
            System.out.println (i);
        }
    }
}
Listing 1.9 La classe Counter : Définition d'une tâche avec l'interface Runnable.

Une fois la tâche définie, on va pouvoir créer un nouvel objet Thread pour exécuter cette tâche dans un nouveau thread d'exécution. Il suffit de créer une instance de la classe Counter et de la passer en paramètre au constructeur de la classe Thread :

1 
2 
3 
4 
public static void main (String[] args)
{
    new Thread (new Counter(), "Alice").start();
}
Listing 1.10 Création d'un thread à partir d'une tâche définie avec l'interface Runnable.

La figure suivante vous montre l'état de la mémoire après exécution de cette méthode main. Vous y voyez clairement qu'il y a maintenant bien séparation entre le thread d'exécution et la tâche à exécuter. On voit en effet les deux objets Thread et Counter dans le tas.

État de la mémoire après exécution du programme du listing 1.10
Figure 1.7 État de la mémoire après exécution du programme du listing 1.10.

Comme on le verra plus tard, on va encore utiliser des tâches définies avec l'interface Runnable pour beaucoup d'autres choses comme des timers, ou des workers dans le cadre de programmes avec une interface graphique.

  • 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.0396402 secondes --- This site uses Thumbshots previews