
|
auteur :
Clément Cunin | Définition : Un thread désigne un point d'exécution dans le programme. En fait, le langage Java est multi-thread, c'est à dire qu'il peut exécuter du code à plusieurs endroits de façon indépendante.
Exemple d'utilisation : L'utilisation des threads est très fréquente dans la programmation réseau. Un client FTP peut télécharger plusieurs fichiers, naviguer sur plusieurs serveurs en même temps, chaque connexion étant gérée par un thread différent. Autre exemple : dans un traitement de texte, un thread s'occupe de ce que tape l'utilisateur, un autre est en charge de souligner les erreurs, un 3ème se charge de faire parler le trombone ! :-)
|
lien : Comment créer un thread ?
lien : Programmation des Threads en Java par Valère VIANDIER
|
|
auteur :
Clément Cunin | Créer un thread est très simple en Java. Deux solutions s'offrent à vous :
Dériver de la class Thread : Vous pouvez créer une nouvelle classe qui dérive de la classe java.lang.Thread. Il suffit ensuite de redéfinir la méthode run(). C'est cette méthode que le thread va exécuter.
Implémenter java.lang.Runnable : Si vous ne souhaitez pas faire une classe dédiée à la gestion du processus, vous pouvez simplement implémenter l'interface java.lang.Runnable et définir la méthode run(). Ensuite il suffit de créer un objet java.lang.Thread en lui passant la classe en paramètre.
Dans tous les cas : Pour lancer l'exécution d'un thread vous devez exécuter la méthode start() et en aucun cas exécuter vous-même la méthode run() (L'exécution se déroulerait alors dans le processus courant !).
|
lien : Qu'est ce qu'un thread ?
lien : Comment terminer un thread sans la méthode stop() ?
lien : Comment faire un minuteur (timer) facilement ?
lien : Programmation des Threads en Java par Valère VIANDIER
|
|
auteur :
Clément Cunin | La méthode stop() de la classe java.lang.Thread étant dépréciée, il est nécessaire de prévoir soit-même la possibilité d'arrêter le processus.
Squelette standard d'un Thread Ce squelette permet de facilement arrêter le processus sans utiliser la méthode dépréciée stop().
/** Ce boolean sera utilisé pour signaler au
* processus s'il doit continuer ou s'arrêter.
*/
private boolean stopThread = false;
public void run() {
boolean fin = false;
while( !fin ) {
try {
synchronized(this) {
Thead.yield();
fin = this.stopThread;
}
} catch( InterruptedException e ) {
}
}
}
public synchronized void stop() {
this.stopThread = true;
}
2ème squelette standard La solution précédente est adaptée aux threads qui effectuent régulièrement le même traitement. Si le traitement est très long, il peut être nécessaire de tester la requête de fin en cours de traitement. Le plus simple est alors de lever une exception en cours de traitement.
private boolean stopThread = false;
public synchronized void testFin() throws InterruptedException {
if( stopThread ) {
throw new InterruptedException();
}
}
public void run() {
try {
} catch( InterruptedException e ) {
}
}
public synchronized void stop() {
this.stopThread = true;
}
|
lien : Pourquoi toutes les méthodes de la classe Thread sont marquées "deprecated" ?
lien : Comment faire un minuteur (timer) facilement ?
lien : Programmation des Threads en Java par Valère VIANDIER
|
|
auteur :
Johann Heymes | On peut utiliser la classe java.lang.Thread ou implémenter l'interface java.lang.Runnable, mais suivant les cas de figure cela représente beaucoup de code et de contraintes. En effet, les instructions qui affectent ou dépendent d'un composant graphique Swing doivent être effectuées par le processus d'évènement (the event-dispatching thread). Par conséquent si l'on utilise la classe Thread ou l'interface Runnable il est nécessaire d'utiliser les méthodes : invokeLater(java.lang.Runnable) ou invokeAndWait(java.lang.Runnable)" javax.swing.SwingUtilities.
La classe Timer : La classe javax.swing.Timer remplace avantageusement l'utilisation directe de thread. Elle génère un évènement à intervalles réguliers (à la milli-seconde). C'est le "event-dispatching thread" qui exécute l'évènement, donc on peut directement modifier des objets graphiques.
Méthodes importantes : le constructeur de javax.swing.Timer :
public Timer (int delay, ActionListener listener);
/** delay = l'intervalle de temps entre chaque évènement.
* listener = l'objetécouteur de ces evènements.
*/
méthode permettant de lancer le processus :
public void start();
méthode permettant de stopper le processus :
public void stop();
Note : Cette méthode est à utiliser uniquement si le traitement à faire est court en temps d'exécution sinon on aura une interface non réactive pendant le traitement ....
|
téléchargement : Exemple d'utilisation pour faire un compteur.
|
|
auteur :
bahamouth | On peut simuler une "pause" dans l'exécution d'une application en utilisant la méthode sleep() de la classe Thread. Cette méthode force le Thread courrant à cesser son exécution pendant le temps passé en paramètres.
Par exemple :
long milliSecondes = 500L;
int nanosSecondes = 6000;
Thread.sleep(milliSecondes, nanosSecondes);
Thread.sleep(milliSecondes);
Ces deux méthodes sont susceptibles de lever une InterruptedException.
|
Consultez les autres F.A.Q's
Les codes sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Ce document issu de http://www.developpez.com est soumis à deux licences, en fonction des contributeurs :
- Les contributions de Clément Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de Clément Cunin et Johann Heymes tant que cette note apparaît clairement :
"Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement".
- Pour ce qui est des autres contributions : Copyright © 2004 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peux en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
|