
FAQ JavaConsultez toutes les FAQ
Nombre d'auteurs : 53, nombre de questions : 231, dernière mise à jour : 7 juin 2009
Sommaire→Généralités→Gestion des threadsLien : Comment créer un thread ?
Lien : Programmation des Threads en Java par Valère VIANDIER
Créer un thread est très simple en Java. Deux solutions s'offrent à vous :
Lien : Qu'est ce qu'un thread ?
Lien : Comment terminer un thread sans la méthode stop() ?
Lien : Programmation des Threads en Java par Valère VIANDIER
Pour ceux qui maîtrisent l'anglais, un petit tour sur le site de Sun : http://java.sun.com/j2se/1.4/docs/guide/misc/threadPrimitiveDeprecation.html.
Pour les autres, toutes ces méthodes ont été marquées deprecated car, sous certaines conditions et sans qu'il y ait d'erreur de conception, l'application peut se bloquer. Typiquement, lorsqu'un thread est tué, il n'est pas possible de savoir ce qu'il était en train de faire, il est donc possible qu'il soit arrêté au milieu d'une modification d'un objet; cet objet est donc laissé dans un état incohérent. Des problèmes similaires peuvent se produire avec les méthodes suspend() et resume().
Lien : Comment terminer un thread sans la méthode stop() ?
Lien : Qu'est ce qu'une méthode 'deprecated' ?
Lien : Programmation des Threads en Java par Valère VIANDIER
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.
/** 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 {
// traitement
synchronized(this) {
Thead.yield();
// lecture du boolean
fin = this.stopThread;
}
} catch( InterruptedException e ) {
}
}
}
public synchronized void stop() {
this.stopThread = true;
}
private boolean stopThread = false;
public synchronized void testFin() throws InterruptedException {
if( stopThread ) {
throw new InterruptedException();
}
}
public void run() {
try {
// traitement avec un appel régulier à testFin();
} catch( InterruptedException e ) {
}
}
public synchronized void stop() {
this.stopThread = true;
}
Attention : les appels à la méthode testFin() doivent être effectués uniquement lorsque tous les objets sont dans un état cohérent. (voir :Pourquoi toutes les méthodes de la classe Thread sont marquées 'deprecated' ?).
Lien : Pourquoi toutes les méthodes de la classe Thread sont marquées 'deprecated' ?
Lien : Programmation des Threads en Java par Valère VIANDIER
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 courant à cesser son exécution pendant le temps passé en paramètres.
Par exemple :
long milliSecondes = 500L;
int nanosSecondes = 6000;
Thread.sleep(milliSecondes, nanosSecondes);
// ou
Thread.sleep(milliSecondes);
Ces deux méthodes sont susceptibles de lever une InterruptedException.
Pour mieux comprendre l'utilisation des Threads, vous pouvez vous pencher sur ces deux tutoriels :
- Programmation des Threads en Java, première partie par Valère VIANDIER.
- Sémaphores et Mutex en Delphi et Java par Wormful_sickfoot.
Depuis J2SE 5.0, java dispose aussi du package java.util.concurrent qui permet une meilleure gestion des concurrences.
Lien : Programmation des Threads en Java, première partie
Lien : Sémaphores et Mutex en Delphi et Java
Lien : Package java.util.concurrent


















