Académique Documents
Professionnel Documents
Culture Documents
• Un ensemble d'instructions à exécuter, pouvant être dans la mémoire morte, mais le plus
souvent chargé depuis la mémoire de masse vers la mémoire vive.
Qu'est-ce qu'un thread ?
Un thread ou fil (d'exécution) ou tâche (autres appellations connues : processus léger, fil
d'instruction, processus allégé ou unité de traitement) est similaire à un processus car tous deux
représentent l'exécution d'un ensemble d'instructions du langage machine d'un processeur. Du
point de vue de l'utilisateur, ces exécutions semblent se dérouler en parallèle. Toutefois, là où
chaque processus possède sa propre mémoire virtuelle, les threads d'un même processus se
partagent sa mémoire virtuelle. Par contre, tous les threads possèdent leur propre piled’appel.
Un programme Java en cours d'exécution lance trois threads :
Lors de la création d'un nouveau thread, la JVM alloue un espace mémoire qui lui est dédié
nommé pile.
La pile d'un thread est un espace de mémoire réservée au thread pour stocker et gérer les
informations relatives à l'invocation des différentes méthodes effectuée par les traitements du
thread. Chaque invocation d'une méthode ajoute une entrée dans la pile qui contient entre autres
une référence sur la méthode et ses paramètres.
C'est la raison pour laquelle la taille de la pile doit être suffisamment importante pour stocker
les différentes invocations d'une méthode notamment si elle est invoquée de manière récursive
et que ce nombre d'appels est important. La pile permet de garder une trace des invocations
successives de méthodes.
1
Voici un petit schéma qui résume tout ceci :
Un thread peut avoir plusieurs états et, selon l'état d'un thread, il sera ou non traité par le
système. Voici la liste de ces différents états ainsi que leurs codes utilisés dans le langage Java
(que vous pouvez trouver avec la méthode getState()) :
État Description
C'est le statut que prend un thread lorsque vous le créez,
en faisant new Thread(…). À ce moment, le thread n'est
Nouveau (NEW) pas encore en cours d'exécution, il faudra invoquer la
méthode start() pour que celui-ci passe dans l'état
exécutable.
2
Voici un petit schéma qui représente les différents états d'un thread au cours de sa vie :
Exemple 1 :
Écrivons un premier thread par extension de la classe Thread (package java.lang). Nous
devons surcharger une seule méthode : la méthode run(), qui retourne void, et ne prend aucun
paramètre.
Lancer un thread signifie demander à la machine Java d'exécuter cette classe dans un fil
d'exécution particulier. Il est possible d'hériter de la classe Thread et de redéfinir la méthode
run().Par convention, le code exécuté dans ce fil est le code écrit dans la méthode run() de
ce thread.
Le lancement d'un nouveau thread se fait par appel à la méthode start() de l'instance
de Thread que l'on veut exécuter. L'appel à cette méthode start() a pour effet de créer un
3
nouveau fil d'exécution dans la machine Java. Ce fil d'exécution va exécuter la
méthode run() de cet objet. C'est pourquoi l'on surcharge cette méthode.
Exemple 2 :
Résultat affiché :
4
Résultat possible :
5
Exemple 3 :
Ecrivez la classe compteur et testez-la en lançant plusieurs compteurs qui comptent jusqu'à 10.
Voyez celui qui a fini le plus vite.