2. PLAN
I. Définition
II. Threads et processus: Pourquoi les Threads?
III. Cycle de vie d’un thread
IV. La classe thread / L'interface Runnable
VI. Démonstration
3. I. Définition
(appelée aussi
processus léger ou activité) est
un fil d'instructions (un chemin
d’exécution) à l'intérieur d'un
processus
est donc une
portion de code capable de
s'exécuter en parallèle à
d'autres traitements.
4. I. Définition
faire des traitements en tâche de fond, c'est le cas de la
coloration syntaxique des éditeurs ;
exécuter plusieurs instances d'un même code pour accélérer
le traitement, pour de longs traitements n'utilisant pas les mêmes
ressources ;
Les threads ont peu d’information propre
Très faciles à créer/détruire
En général, 100 fois plus rapide à créer qu’un processus
Permettent de recouvrir le calcul et les I/Os
5. II. Threads et Processus:
Pourquoi les Threads?
Inconvénients du processus classique:
Changement de contexte long (notamment pour les
applications du type "temps réel" ou "multi média"),
Pas de partage de mémoire (communications lentes)
Manque d’outils de synchronisation
Interface rudimentaire (fork, exec, exit, wait)
Contrairement aux processus:
les threads d’un même processus partagent
le même espace d’adressage,
le même environnement (par exemple les
mêmes variables d’environnement, des
mêmes données, etc.).
2 threads d’un même processus
communiquent beaucoup plus facilement
que 2 processus.
Processus
6. II. Threads et Processus:
Pourquoi les Threads?
Par contre les threads ont leur propre ressources:
un identificateur (le thread identifier, ou tid, équivalent du pid)
une priorité
une configuration de registres
Dispose de sa propre pile pour implanter les variables locales
un masque de signaux
d'éventuelles données privées
Les programmes qui utilisent plusieurs threads sont dits
multithreadés.
7. III. Cycle de vie d’un Threads
Le thread peut avoir quatre états différents, mais deux seulement
peuvent être testés.
C'est l'état initial après l'instanciation du
thread. À ce stade, le thread est
opérationnel, mais celui-ci n'est pas
encore actif.
Un thread est dans un état exécutable à
partir du moment où il a été lancé par la
méthode start() et le reste tant qu'il n'est
pas sorti de la méthode run().
Dès que le système le pourra, il donnera
du temps d'exécution à votre thread.
8. Un thread en attente est un thread qui n'exécute aucun traitement et ne
consomme aucune ressource CPU. Il existe plusieurs manières de mettre un
thread en attente. Par exemple :
appeler la méthode thread.sleep (temps en millisecondes) ;
appeler la méthode wait() ;
accéder à une ressource bloquante (flux, accès en base de données, etc.) ;
accéder à une instance sur laquelle un verrou a été posé ;
appeler la méthode suspend() du thread.
Un thread en attente reste considéré comme exécutable.
Un thread dans un état mort est un thread qui est sorti de sa méthode
run() soit de manière naturelle, soit de manière subite (Exception non
interceptée).
9. IV. L'interface Runnable La
classe thread
L'interface Runnable du package java.lang. nous met à
disposition une unique méthode, la méthode run() dont la
signature est la suivante :
Public void run();
Notre traitement doit se trouver dans cette méthode. Il ne peut pas
prendre de paramètre et ne peut pas retourner de valeur.
La classe thread du package java.lang est celle qui doit
impérativement être dérivée pour qu'une classe puisse être
considérée comme un thread et donc, exécutable en parallèle.
Cette classe concrète implémente l'interface Runnable