fil (flot, flux) d'exécution.
Besoin
Permettre l'exécution de tâches parallèles au sein d'un même processus.
Conception
Des threads sont caractérisés par :
- un nom
- une pile d'exécution
En dehors de ces données particulières, ils partagent tout le reste, c'est-à-dire les divers élements composants
du processus dans lequel ils s'exécutent, comme :
- ses descripteurs de fichier
- sa mémoire
Ils peuvent donc :
- travailler sur des données communes : peut alors se poser le problème de modifications
concurrentes sur les mêmes données (que se passe-t-il si 2 threads modifient en même temps les noms et prénoms
d'une personne et qu'un 3ᵉ tente de lire ces noms et prénoms ? Ce dernier lira-t-il des informations cohérentes
ou mélangées ?). Lorsqu'une structure de données (un objet typiquement) contrôle ses accès afin de garantir sa
cohérence malgré les accès concurrents, on dit qu'elle est thread-safe.
- communiquer entre eux (s'attendre, se donner des rendez-vous, etc.).
Implémentation
En Java la gestion des threads est intégrée à la plate-forme. Un thread est représenté par la classe java.lang.Thread
Il y a deux manière de créer ses propres threads :
- héritage : créer une spécialisation de la classe
Thread
et la démarrer.
- délégation : créer et démarrer un thread en lui fournissant la tâche
(
java.lang.Runnable
) qu'il devra exécuter.
L'accès de threads concurrents à un objet peut être contrôlé via :
Exemples
Des exemples de threads sont :
Notes
- Egalement appelés modifieurs (mutators) car ce sont les seuls objets qui modifient l'état
d'autres objets.
- Plus performants que des processus (pas d'allocation mémoire, pas de basculement de contexte, etc.)
s1"HotSpot
- Threading", JavaSoft