Ecole Normale Supérieure de l'Enseignement Technique
(ENSET)
Les threads
en Java
Abdelmajid BOUSSELHAM
Email: bousselham@[Link]
Researchgate : [Link]
Google Scholar: [Link]
Scopus: [Link]
Linkedin: [Link]
Qu’est ce qu’un thread
• Java est un langage multithreads.
• Le multithreading est une fonctionnalité Java qui permet l'exécution simultanée de plusieurs blocs d'un
programme.
• Dans ce cas, chaque bloc est appelé Thread (tâche ou fil).
Création et démarrage d’un thread
• En java, il existe, deux techniques pour créer un thread:
▪ Soit vous dérivez votre thread de la classe [Link].
▪ Soit vous implémentez l’interface [Link].
Créer un thread en dérivant de la classe Thread
• Exemple :
Créer un thread en implémentant l’interface Runnable
• Exemple :
Quelle technique choisir ?
Méthode Avantages Inconvénients
extends Threads Chaque thread a ses On ne peut plus hériter
données qui lui sont d’une autre classe.
propres.
Implements Runnalble L’héritage reste Les attributs de votre
possible. En effet, on classe sont partagés
peut implémenter pour tous les threads
autant d’interfaces que qui y sont basés. Dans
l’on souhaite. certains cas, il peut
s’avérer que cela soit
un atout.
L’état d’un thread
L’état d’un thread
• NEW - Le thread est créé mais pas encore démarré (appel à start()). RUNNABLE - Le thread est prêt à être
exécuté mais attend l'allocation du processeur. RUNNING - Le thread est en cours d'exécution sur le
processeur. BLOCKED - Le thread attend un verrou ou une ressource pour continuer. WAITING - Le thread
attend indéfiniment qu'un autre thread le notifie (wait()). TIMED_WAITING - Le thread attend pour une
durée limitée (sleep(), join(time)). TERMINATED - Le thread a terminé son exécution ou a été arrêté
Gestion de la priorité d’un thread.
• Dans l’exemple suivant nous avons donné le maximum de priorité pour le thread T2 et le minimum de
priorité pour le thread T1, du coup le thread T2 termine en premier.
Synchronisation de threads et accès aux ressources partagées.
• Lors ce que vous lancez une JVM (Machine Virtuelle Java), vous lancez un processus.
• Ce processus possède plusieurs threads et chacun d’entre eux partage le même espace mémoire.
• En effet, l’espace mémoire est propre au processus et non à un thread.
• Cette caractéristique est à la fois un atout et une contrainte.
• En effet , partager des données pour plusieurs threads est relativement simple.
• Par contre les choses peuvent se compliquer sérieusement si la ressource (les données) partagée est
accédée en modification.
• Il faut synchroniser les accès concurrents. Nous sommes certainement face à l’un des problèmes
informatiques les plus délicats à résoudre.
Synchronisation de threads et accès aux ressources partagées.
• Dans l’exemple suivant on synchronise la modification de l’attribut nb qui partagé entre les deux thread
crées :
Résultat: