| Terme | Définition |
|---|---|
| Attente sur condition | Mécanisme permettant de régler l'ordre d'accès à une donnée partagée. Un thread attend passivement qu'une ou plusieurs conditions deviennent vraies avant de poursuivre son exécution. |
| Exclusion mutuelle | Principe visant à éviter qu'un thread ne modifie une donnée partagée pendant qu'un autre thread est en train de la lire ou de la modifier, garantissant ainsi l'intégrité des données. |
| Famine (Starvation) | Problème d'ordonnancement où un ou plusieurs threads n'obtiennent quasiment jamais l'accès à une ressource partagée, car ils sont systématiquement contournés par d'autres threads. |
| Interblocage (Deadlock) | Situation dans laquelle plusieurs threads s'attendent mutuellement, chacun attendant qu'un autre relâche une ressource dont il a besoin pour continuer, ce qui provoque un blocage complet. |
| Mutex | Un « verrou » que l'on associe à des données partagées. Un thread doit acquérir (verrouiller) le mutex pour accéder aux données et le relâcher (déverrouiller) ensuite, empêchant ainsi les autres threads d'y accéder simultanément. |
| notifyAll() | Méthode Java qui réveille tous les threads qui sont en attente (wait()) sur le mutex d'un objet donné. |
| Processus « lourd » | Un processus classique du système d'exploitation, possédant son propre espace mémoire. La création de tels processus est impossible en Java. |
| Section critique | Une portion de code qui accède à une ressource partagée et qui ne doit pas être exécutée par plus d'un thread à la fois. Les mutex servent à protéger ces sections. |
| Sémaphore | Un outil de synchronisation, décrit comme une « boîte à jetons ». Les threads doivent acquérir un ou plusieurs jetons pour accéder à une ressource et les restituent après utilisation. |
| start() | Méthode de la classe Thread en Java qu'il faut appeler pour démarrer l'exécution d'un thread. Elle se charge d'invoquer la méthode run() du thread. |
| synchronized | Mot-clé Java utilisé pour implémenter l'exclusion mutuelle. Il peut être appliqué à une méthode entière ou à un bloc de code pour s'assurer qu'un seul thread peut l'exécuter à la fois sur une instance d'objet donnée. |
| Thread | Un « processus léger » qui s'exécute au sein d'un processus classique. Plusieurs threads peuvent coexister dans le même processus et partagent implicitement son espace mémoire. |
| wait() | Méthode Java qui met un thread en état d'attente passive. Le thread relâche le mutex de l'objet sur lequel il attend, permettant à d'autres threads d'y accéder. |
Un thread est défini comme un « processus léger s'exécutant au sein d'un processus classique, dit lourd ». Cette légèreté se traduit par plusieurs avantages et inconvénients clés.
Avantages :
Inconvénients :
L'utilisation des threads est primordiale dans les scénarios nécessitant de la concurrence, comme les serveurs multi-clients. Un serveur FTP, par exemple, doit pouvoir gérer simultanément l'envoi et la réception de fichiers pour plusieurs clients tout en maintenant une liste de fichiers partagée en mémoire.
En Java, la création de processus lourds est impossible, et le partage de mémoire entre eux serait de toute façon complexe. Les threads constituent donc la solution native et intégrée pour gérer ces besoins de concurrence.
Le principal défi de la programmation multithreadée réside dans la gestion des accès concurrents aux données partagées.