You are on page 1of 5

Iremia, R.

Courdier

Chapitre 6 : Processus Légers

les “threads”

Java
© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 1

Sommaire

Les Threads
Utilité des processus légers
La Classe Thread et l’interface Runnable
Implémentation de Runnable
Spécialisation de la classe Thread

Les démons
Le partage de ressources
Bloquer un processus
Les groupes de thread

© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 2

03/27/99 1
Iremia, R.Courdier

Threads
Utilité des processus légers

Creer des processus séparés, 2 techniques


“indépendants” Implémenter l’interface Runnable
class x implements Runnable
{
Accéder à la programmation //corps de classe
concurrente (parallèle) }
implémenter des mécanismes de
synchronisation et de rendez-vous
gérer des interfaces utilisateurs hériter de la classe Thread
class x extends Thread
sophistiquées
{
créer des serveurs de réseaux
//corps de classe
gestion de graphiques animés }

Masquer la complexité des


mécanismes de “time slicing”

© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 3

Threads
implémentation de Runnable

L’interface Runnable /** Fichier Runnable.java */


...
Une seule fonction run() :
public class T1 extends applet
invoquée par la méthode start()
implements Runnable {
de la classe Thread Thread selfThread = null;
Ne permet la création que ...
public void run() {
d’une Thread pour une
while(true){...
instances de classe donnée try {
La classe qui implémente Thread.currentThread().sleep(50);
} catch(Exception e) {}
Runnable n’a pas de ...}
possibilités de multi-processing }
Il faut qu’elle gere la création d’une ...
instance de Thread qui prend en public void declencheThread() {
argument un objet “Runnable” if (selfThread == null) {
selfThread = new Thread(T1.this);
Il faut ensuite appeler start()
selfThread.start();
sur le thread }
le start() appelera alors run() }
}

© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 4

03/27/99 2
Iremia, R.Courdier

Threads
spécialisation de la classe Thread

Technique pour creer plusieurs


threads associées à une /** Fichier tabThread.java */
...
instance d’une classe C class T extends Thread {
On cree une autre classe T ...
public void run() {
gérée par la classe C
while(true){...
La classe T hérite de Thread try {
avec les mécanismes de multi- Thread.currentThread().sleep(50);
} catch(Exception e) {}
processus ...}
Technique plus générale et }
public class C extends Applet {
plus ouverte que l’interface T tabT[] = new T()[10];
Runnable : il est conseillé en public void init() {...
règle générale de l’utiliser for (int i;...) s[i]start();
}
la classe T peut être définie ...
comme une inner classe }

© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 5

Thread
Les démons

Processus s’exécutant en tache


de fond tant que le programme
tourne
Un démon “meurt” lorsque THREAD AUTRES
l’application se termine DU THREADS DE
MAIN() L’APPLI
Méthodes sur les démons :
boolean isDeamon(Thread)
void setDeamon(boolean)
THREAD DÉMONS
Déclaration :
Dans le constructeur (en général) on
possitionne le thread comme étant un
démon :
MaClasseDeamon() {
setDeamon(true);
start();
}
© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 6

03/27/99 3
Iremia, R.Courdier

Les Threads
Le partage de ressources

Java intègre dans le langage lui-même des éléments de langage


pour gérer le partage de ressources
utilisation du mot clé synchronized
synchronized void f() { /*...*/ }
synchronized void g() { /*...*/ }
si f() est appelée pour une instance i ,
g() ne peut être appelée sur l’instance i tant que f() n’est pas terminée
il y a mise en place automatique d’un principe de vérouillage (lock) des
données de l’instance concernée

performance
un principe de verouillage est un mécanisme couteux
faire des fonctions synchronisées petites pour que le blockage soit le plus court
possible
attention aux problèmes de blockage temporaire de traitement
attention au DeadLock

© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 7

Les thread
Bloquer un processus

Les 4 états d’un Thread :

New : l’objet thread est créé mais Cas de blockage d’un Processus
n’est pas “started”
sleep(milliseconds)
Runnable : Le “scheduler” prend en
compte cette tache dans son suspend()...
allocation de temps CPU ...resume()

Dead : sortie de la méthode run() ou wait()...


suite à l’invocation de la méthode ...notify() ou notifyAll()
stop() (à éviter car déclenche une
exception) attente de terminaison d’une
entrée/sortie
Blocked : Le “scheduler” n’alloue pas
pas de temps CPU pour le processus méthode synchronisée qui
jusqu’à ce qu’elle redevienne block l’accés à l’instance
Runnable

© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 8

03/27/99 4
Iremia, R.Courdier

Les threads
Priorités

Java permet d’associer un niveau de priorité à chaque


thread

Cette information est exploitée par le scheduler lors de


son partage de temps CPU aux processus

Variable utiles
Thread.MAX_PRIORITY
Thread.MIN_PRIORITY
Par défaut la priorité est 5 en Java 1.1

Méthodes utiles :
getPriority()
setPriority()

© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 9

Les thread
Les groupes de thread

Un thread appartient à un groupe


Par défaut un thread appartient au groupe “system”
Creation
public static void main (...) {...
ThreadGroup x = new ThreadGroup (“GroupeX”);
ThreadGroup y = new ThreadGroup (“GroupeY”);
Thread t1 = new T1(x, “t1”);
Thread t2 = new T2(y, “t2”);
}
...
class T1 extends Thread {
...
T1(ThreadGroup g, String name) {
super (g, name);
}
}
© Rémy Courdier 1996-2003 - le multitache Java - Version du cours 2.8 10

03/27/99 5

You might also like