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.