Threads
Threads
Threads
Mai 2007
Plan du cour
Prsentation de la notion de Threads La classe Thread Linterface Runnable Les tats dun thread La Synchronisation
Programme
Thread Principal
Thread
Fin du thread
Un tat dexcution Sa propre pile Un espace ddi des variables propres au thread Laccs aux variables du processus Laccs aux ressources du processus (exemple : accs un fichier ouvert par un autre thread du mme processus).
Processus
Thread 1
Ressources, Donnes
Thread 2
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Avantages du multithreading par rapport aux processus : partage plus efficace des ressources communes moins de surcharge au niveau du processeur Les threads sont au cur mme de Java et de la machine virtuelle : tout programme Java est excut en tant que Thread de la machine virtuelle. (Garbage collector, thread principal, pile des vnements graphique)
La classe Thread
La classe Thread
Package : java.lang La classe java.lang.Thread implmente le mcanisme permettant la cration dun nouveau fil dexcution. Mise en uvre : Faire driver la classe de java.lang.Thread Puis fournir un point dentre au nouveau thread en surchargeant la mthode run() Appel de la mthode start(), sur une instance drivant de Thread, afin de crer le nouveau fil dexcution.
Class C extends Thread { public C { // } public void run() { // } }
La classe Thread
Exercice : Crer une classe ClasseThreadee, drivant de Thread, ayant pour fonction dcrire sur la sortie standard son nom, ainsi quun compteur.( de 1 100 000 par exemple) Depuis une classe part, crer 4 objets de ClasseThreadee sexcutant simultanment.
La classe Thread
Avantages Simplicit de mise en uvre Inconvnients Java nautorisant pas lhritage multiple, le fait de driver de Thread apporte certaines contraintes de conception objet. Autre solution pour le multi-threading : utilisation de linterface java.lang.Runnable.
Linterface Runnable
Linterface Runnable
La deuxime approche pour la cration de thread est lutilisation de linterface Runnable. Vous pouvez transformer nimporte quelle classe en Thread, en la faisant implmenter linterface Runnable. Concrtement, cela implique dimplmenter la mthode dentre dans le thread : run().
Linterface Runnable
Comment utiliser lobjet implmentant Runnable pour le faire sexcuter dans un nouveau Thread ? Rponse : on cre un nouvel objet Thread, en passant en argument au constructeur une rfrence lobjet implmentant linterface Runnable
Linterface Runnable
Exercice : Modifiez le code de lexercice prcdent de sorte utiliser linterface Runnable.
En attente
En cours dexcution
Mort
Thread[Compteur]