Ministère de l’Enseignement Supérieur de la<br />Recherche Scientifique et de la technologie<br />*** * ***<br />Universit...
Classe Thread<br />Création d’un Thread<br />Accès simultané<br />Synchronisation<br />Etats d’un Thread<br />SOMMAIRE<br ...
Définition<br />Capacité d'un programme à lancer simultanément plusieurs processus de traitement.<br />
Avantages     /     Inconénients<br /><ul><li>Consommation de  moins de ressources par rapport à plusieurs processus s'exé...
Pouvoir répartir différents traitements d'un même programme en plusieurs unités distinctes pour permettre leur exécution "...
 Mise en place des mécanismes de synchronisation par le programmeur alors que cette répartition est d'habitude à la charge...
La complexité des programmes utilisant des processus légers.</li></li></ul><li>Classe Thread (1/2)<br /><ul><li>Package : ...
Implémente l'interface Runnable.
Les constructeurs sont :
Thread()  : crée une référence sur une tâche asynchrone. Celle-ci est encore inactive. La tâche créée doit posséder la mét...
Thread(Runnableobject)  : idem mais c'est l'objet Runnable passé en paramètre qui implémente la méthoderun().
Un thread possède une priorité et un nom.</li></li></ul><li>Classe Thread (2/2)<br /><ul><li>currentThread(): retourne le ...
setName() 	        : fixe le nom du thread
getName()	        : retourne le nom du thread
isAlive()	        : indique si le thread est actif ou non
Prochain SlideShare
Chargement dans…5
×

Multithreading

2 609 vues

Publié le

- Principe du multithreading.
- Classe Thread.
- Création et exécution d'un thread.
- Accès simultanés à une ressource.
- Synchronisation
- Etats d'un Thread
- Conseils pratiques

Publié dans : Technologie, Formation
1 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
2 609
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
5
Commentaires
1
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Multithreading

  1. 1. Ministère de l’Enseignement Supérieur de la<br />Recherche Scientifique et de la technologie<br />*** * ***<br />Université de la Manouba<br />*** * ***<br />Ecole Nationale des Sciences de l’Informatique<br />Aspects avancés de JAVA<br />Multithreading<br />Présenté par : Ghazouani Mahdi<br />
  2. 2. Classe Thread<br />Création d’un Thread<br />Accès simultané<br />Synchronisation<br />Etats d’un Thread<br />SOMMAIRE<br />Définition<br />Avantages / Inconvénients<br />Conseils pratiques<br />
  3. 3. Définition<br />Capacité d'un programme à lancer simultanément plusieurs processus de traitement.<br />
  4. 4. Avantages / Inconénients<br /><ul><li>Consommation de moins de ressources par rapport à plusieurs processus s'exécutant en même temps.
  5. 5. Pouvoir répartir différents traitements d'un même programme en plusieurs unités distinctes pour permettre leur exécution "simultanée".
  6. 6.  Mise en place des mécanismes de synchronisation par le programmeur alors que cette répartition est d'habitude à la charge du système d'exploitation. 
  7. 7. La complexité des programmes utilisant des processus légers.</li></li></ul><li>Classe Thread (1/2)<br /><ul><li>Package : java.lang
  8. 8. Implémente l'interface Runnable.
  9. 9. Les constructeurs sont :
  10. 10. Thread() : crée une référence sur une tâche asynchrone. Celle-ci est encore inactive. La tâche créée doit posséder la méthode run().
  11. 11. Thread(Runnableobject) : idem mais c'est l'objet Runnable passé en paramètre qui implémente la méthoderun().
  12. 12. Un thread possède une priorité et un nom.</li></li></ul><li>Classe Thread (2/2)<br /><ul><li>currentThread(): retourne le thread en cours d'exécution
  13. 13. setName() : fixe le nom du thread
  14. 14. getName() : retourne le nom du thread
  15. 15. isAlive() : indique si le thread est actif ou non
  16. 16. start() : lance l'exécution d'un thread
  17. 17. run() : méthode exécutée automatiquement après que la méthode start() précédente ait été exécutée
  18. 18. sleep(n) : arrête l'exécution d'un thread pendant n ms
  19. 19. join() : opération bloquante - attend la fin du thread pour passer à l'instruction suivante</li></li></ul><li>Création d’un Thread (1/3)<br /><ul><li>Pour que les traitements d'une classe soient exécutés dans un thread, il faut obligatoirement que cette classe implémente l'interface Runnable.
  20. 20. Deux façons de définir une telle classe
  21. 21. la classe hérite de la classe Thread
  22. 22. La classe implémente l'interface Runnable</li></li></ul><li>Création d’un Thread (2/3)<br />Dérivation de la classe Thread<br />package com.personal.threadTest;<br />public class MonThread1 extends Thread {<br /> public staticvoid main(String[ ] args) {<br /> Thread t = new MonThread1();<br />t.start(); }<br /> public voidrun() {<br />int i = 0;<br /> for (i = 0; i > 10; i++) {<br />System.out.println(" " + i);<br /> }}}<br />
  23. 23. Création d’un Thread (3/3)<br />Création avec l'interface Runnable<br />package com.personal.threadTest;<br />public class MonThread2 implementsRunnable {<br /> public voidrun() {<br />int i = 0;<br /> for (i = 0; i > 10; i++) {<br />System.out.println(" " + i);<br /> }}}<br />public class MonThread3 {<br /> public static void main(String[ ] args) {<br /> Thread t = new Thread(new MonThread2());<br />t.start();<br /> }}<br />
  24. 24. Accès simultané (1/2)<br />Cas où 2 threads s'exécutent en même temps et veulent accéder à la même ressource <br />==> Il ne faut pas qu'ils le fassent en même temps. <br /><ul><li> Sécurisation d'une méthode
  25. 25. déclarer la méthode synchronized()
  26. 26. Lorsqu'un thread t1 exécute cette méthode sur un objet, un autre thread t2 ne peut pas l'exécuter pour le même objet. En revanche t2 peut exécuter cette méthode pour une autre instance de la même classe.</li></ul> Public synchronizedvoidmaMethode () {...}<br />
  27. 27. Accès simultané (2/2)<br /><ul><li>Sécurisation d'un bloc
  28. 28. Cas de méthodes synchronisées trop longue => baisse d'efficacité lors de l'exécution
  29. 29. Possibilité de placer un bloc de code à synchroniser
  30. 30. L'objetdont le moniteurest à utiliserdoitêtre passé en paramètre de l'instruction synchronized .</li></ul>Public voidmaMethode () {<br /> ...<br />synchronized (objet) { objet.methode();}<br /> ...<br />}<br />
  31. 31. Synchronisation<br /><ul><li> Chaque objet possède un verrou ou moniteur
  32. 32. Lorsqu'une méthode synchronisée d'un objet est appelée, le verrou est mis, aucune autre méthode synchronisée de cet objet ne peut être exécutée.
  33. 33. Acquérir le verrou d'un objet est couteux. Pour éviter une dégradation des performances, il faut que les sections critiques soient courtes et utilisés à bon escient. Un appel à une méthode synchronisée coute 4 fois plus cher</li></li></ul><li>Etats d’un Thread<br /><ul><li> Nouveau : il a été crée mais start() n'est pas encore appelé
  34. 34. Exécutable : il a été initialisé (il est exécuté si l'ordonnanceur le décide)‏
  35. 35. Mort : fin normal d'un thread (sortie de la méthode run())‏
  36. 36. Bloqué : l'ordonnanceur ignore le thread</li></li></ul><li>Conseils pratiques<br /><ul><li> Maintien en cohérence: Éviter l'utilisation de :
  37. 37. Stop() : cette méthode libère les verrous
  38. 38. Remplacer par un test dans la boucle du run()‏
  39. 39. Suspend (et donc resume) : car ils sont source de nombreux deadlock
  40. 40. Ne pas créer trop de thread
  41. 41. Dégradation en performance..</li></li></ul><li>Merci de votreattention<br />http://www.slideshare.net/mahdiSolution<br />

×