« Programmation Java/Processus légers et synchronisation » : différence entre les versions

Contenu supprimé Contenu ajouté
Tavernierbot (discussion | contributions)
m Bot: Retouches cosmétiques
Ligne 3 :
Les threads permettent l'exécution de plusieurs tâches en même temps.
 
== Qu'est ce qu'un thread ? ==
Un thread est un contexte d'exécution d'une application.
Ce thread possède sa propre pile et pointeur d'exécution.
Ligne 15 :
Cependant, en Java, d'autres threads sont créés quand l'application utilise une interface graphique, notamment un thread gérant la boucle de lecture des messages systèmes.
 
== Thread courant ==
En Java, tout thread est représenté par un objet de classe <code>Thread</code>.
Le thread courant est retourné par la méthode statique <code>currentThread</code> de la classe <code>Thread</code>.
Ligne 26 :
 
 
== Créer un thread ==
La classe <code>Thread</code> peut être dérivée pour créer un autre thread.
Dans ce cas, il faut surcharger la méthode <code>run()</code> pour y mettre le code exécuté par le thread.
Ligne 70 :
System.err.println("Le thread est démarré.");
 
== Actions sur un thread ==
 
=== Cycle de vie d'un thread ===
Un thread possède différents états gérés par le système :
* état ''prêt'' : le thread est prêt à être exécuté,
Ligne 79 :
* état ''terminé'' : le thread a achevé son exécution ou a été interrompu.
 
=== InterruptedException ===
Cette classe d'exception est lancée par les méthodes de la classe <code>Thread</code> et celle de la classe <code>Object</code> demandant la suspension pour un temps indéterminé du thread courant (attente en général).
 
Ligne 85 :
Capturer cette exception permet d'interrompre l'attente, et libérer des ressources pour terminer proprement.
 
=== Attendre la fin d'un thread ===
La méthode <code>join()</code> de la classe <code>Thread</code> peut être appelée pour attendre la fin d'un thread.
 
Ligne 91 :
th.wait(); // InterruptedException à capturer
 
=== Interrompre un thread ===
La méthode <code>interrupt()</code> de la classe <code>Thread</code> peut être appelée pour interrompre un thread.
Cette méthode provoque le lancement d'une exception de type <code>InterruptedException</code> quand le thread appelle une méthode d'attente.
 
== Synchronisation ==
La synchronisation devient nécessaire quand plusieurs threads accèdent aux mêmes objets.
 
=== mot-clé synchronized ===
Le mot-clé <code>synchronized</code> permet un accès exclusif à un objet.
 
Ligne 139 :
}
 
=== Attente et signal ===
Quand le mot-clé <code>synchronized</code> ne suffit pas (par exemple, permettre l'accès à deux threads simultanément au lieu d'un seul), il est possible de suspendre un thread et le réveiller.