Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 1 JAV – TD 8 Les threads en Java.

Slides:



Advertisements
Présentations similaires
La programmation concurrente en Java
Advertisements

TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
Plan du cours 5:Threads introduction Définition Création des Threads
JAV - TD 6 Structures de données JAVA
Packages et résolution de noms
JAV – TD 3 bibliothèques standards composition
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV Threads Module Java Expert.
Programmation orientée objet
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
NSY102 1 Concurrence compléments Notes de cours Cnam Paris jean-michel Douin, douin au cnam point fr 19 Mars 2007.
Programmation concurrente
CSI2520, Hiver 2007 Programmation concurrente. CSI2520, Hiver 2007 Programmation concurrente La programmation est distribuée lorsque les processus ne.
Parallelisme (Basé sur Concepts of Programming Languages, 8th edition, by Robert W. Sebesta, 2007)
Multi-Thread Jian-Yun Nie
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Programmation Système et Réseau
Introduction à la programmation objet avec java
JAVA et l'orientation objet Jean-Jacques LE COZ. Encapsulation L'encapsulation est le concept de masquer l'implémentation de la classe De ne permettre.
Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
Stéphane Frénot, Frédéric Laforest, Frédéric Le Mouël IJA 1 IJA – TD 8 Les threads en Java.
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV 1 JAV - TD 7 Les entrées / sorties JAVA Les Flux Le package java.io La gestion.
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 6 IJA Structures de données JAVA.
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
Programmation orientée objet AppInventor ArduBlock Communication
Présentation de Java 2006 INSA lyon
1 Communication interprocessus. 2 Plan 1. Introduction 2. Sections critiques et exclusion mutuelle 3. Exclusion mutuelle par attente active 1. Le masquage.
Modèle objet : les classes
java : l'héritage (rappel)
APIs Concurrentes Rémi Forax
Threads et Lightweight Processes
Pas de variable globale
Les notions de classe et d'objet
Qu'est-ce que POSIX? Une librairie en langage C
5 – PARALLELISME , ORDONNANCEMENT
Javadoc et débogueur Semaine 03 Version A17.
Langages pour le Temps Réel
L'approche asynchrone.
Principes de programmation (suite)
11ième Classe (Mardi, 18 novembre) CSI2572
Langages de programmation TP7
IDL_IDL bridge The IDL_IDLBridge object class allows an IDL session to create and control other IDL sessions, each of which runs as a separate process.
Langages de programmation TP10
E) Constructeurs et héritage
Les interfaces en PHP.
Système flexible de Workflow pour la plate-forme Motu
Réalisation d’une lampe connectée pilotée par bluetooth
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Programmation Orientée Objet C# El Akel Bouchra ISMONTIC Tanger 2013/2014.
Le Java premiers pas.
Les classes et les objets
Chapitre 7 continuation
Java : Socket et Réseaux
Langages de programmation TP11
Les exceptions Le mécanisme des exceptions est destiné à permettre aux fonctions profondes d'une bibliothèque de notifier la survenue d'une erreur aux.
Schéma de conception Factory Method Exemple
Programmation par Objets et Java
Piles et files.
Threads et Lightweight Processes
Ordonnancement des processus sous Windows NT
STREAMS (et fichiers).
Variables et accès en Java
Structure de données Les listes.
TP N°1 : GUI en NetBeans Module R & C Université de Jijel
Contenu Systèmes de test parallèles Multithreading Synchronisation
TP N°6: Construction d’un Serveur Multi-Client
Transcription de la présentation:

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 1 JAV – TD 8 Les threads en Java

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 2 Les threads – Objectifs Thread = fil d’exécution dans un processus Permet au sein d’un même programme (processus) d’exécuter parallèlement plusieurs tâches, de manière indépendante ou de manière synchronisée Tout objet Java s’exécute dans au moins un thread

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 3 Les threads – Vie et mort Exécution de tâches en // Mémoire, Code et Ressources partagés Économie de ressources Un thread ~= méthode qui rend immédiatement la main Exemple événements (IHM, GC)‏ + priorités + synchronisation –(moniteur, synchronized)‏ Implantation dépendante du SE

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 4 Les threads – Syntaxe 1 L’héritage à partir de Thread est contraignant car il empêche tout autre héritage public class Compteur extends Thread { public void run() {...} } Compteur c = new Compteur(); c.start();

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 5 Les threads – Syntaxe 2 L’implémentation de l’interface Runnable permet une grande flexibilité : possibilité d’héritage et d’implémentation d’autres interfaces public class Compteur implements Runnable { public void run() {...} } Compteur c = new Compteur(); new Thread(c).start();

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 6 Exercice Écrire le thread Compteur des deux manières possibles Tester l’exécution du thread à partir d’un client et à partir de l’objet lui-même

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 7 Les threads – Démarrage, arrêt run, start : démarrage du thread sleep : pause de x ms du thread yield : un autre thread peut prendre la main interrup : interruption du thread isAlive : le thread est vivant ? isInterrupted : le thread est interrompu ?

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 8 Les threads – Ordonnancement et priorités L’ordonnancement est en partie dépendant des implémentations Pour 2 threads de même priorité, par défaut : round robin T1 cède la place a T2 quand sleep, wait, bloque sur un yield getPriority, setPriority : récupération ou changement de la priorité d’exécution d’un thread par rapport aux autres

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 9 Les threads – Synchronisation Synchronisation physique : synchronized sur un objet : accès critique à cet objet par un seul thread à la fois public class Compteur implements Runnable { private int c; public void run() {...} public void increment() { synchronized(this) { c++; } }

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 10 Compteur de nombre pairs public class TestThread implements Runnable{ int prod=0; private int change(){ this.prod++; return this.prod; } public void run(){ try{while (true){ System.out.println(">"+this.change()); }}catch(Exception e){}} } 1-Attaquez ce compteur depuis 2 threads (2 threads sur le même objet compteur!). 2-Ajoutez un Thread.sleep() entre les 2 incréments. Que se passe-t-il? Pourquoi?

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 11 Les threads – Synchronisation Synchronisation temporelle : – join : attend la fin d’un thread – wait : thread bloqué jusqu'à ce qu'un autre thread appelle notify ou notifyAll (NB: wait libère le verrou)‏ – notify : débloque un thread bloqué par wait (le premier en queue : FIFO)‏ – notifyAll : débloque tous les threads bloqués par wait

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 12 Exercice – Producteur/Consommateur /** Example from Sun Thread tutorial */ public class Producer implements Runnable { private CubbyHole cubbyhole; private int number; public Producer(CubbyHole c, int number) { this.cubbyhole = c; this.number = number; } public void run() { for (int i = 0; i < 10; i++) { this.cubbyhole.put(i); System.out.println("Producer #" + this.number + " put: " + i); try { Thread.sleep((int)(Math.random() * 100)); } catch (InterruptedException e) { } }

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 13 Exercice – Producteur/Consommateur /** Example from Sun Thread tutorial */ public class Consumer implements Runnable { private CubbyHole cubbyhole; private int number; public Consumer(CubbyHole c, int number) { this.cubbyhole = c; this.number = number; } public void run() { int value = 0; for (int i = 0; i < 10; i++) { value = this.cubbyhole.get(); System.out.println("Consumer #" + this.number + " got: " + value); }

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 14 Exercice – Prod./Cons. – Ressource partagée public class CubbyHole { private int contents; public int get() { return contents; } public void put(int value)‏ { contents = value; } Consumer #1 got: 0 Producer #1 put: 0 Consumer #1 got: 0 Producer #1 put: 1 Producer #1 put: 2 Producer #1 put: 3 Producer #1 put: 4 Producer #1 put: 5 Producer #1 put: 6 Producer #1 put: 7 Producer #1 put: 8 Producer #1 put: 9 Tester l’exécution de cette version du Producteur/Consommateur La trace obtenue est-elle correcte ?

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 15 Exercice – Prod./Cons. – Ressource partagée Producer #1 put: 0 Consumer #1 got: 0 Producer #1 put: 1 Consumer #1 got: 1 Producer #1 put: 2 Consumer #1 got: 2 Producer #1 put: 3 Consumer #1 got: 3 Producer #1 put: 4 Consumer #1 got: 4 Producer #1 put: 5 Consumer #1 got: 5 Producer #1 put: 6 Consumer #1 got: 6 Producer #1 put: 7 Consumer #1 got: 7 Producer #1 put: 8 Consumer #1 got: 8 Producer #1 put: 9 Consumer #1 got: 9 Modifier la ressource partagée CubyHole avec des synchronized, wait(), notifyAll() pour obtenir le comportement correct correspondant à la trace ci-contre NB : on ajoutera une variable available qui indique si la valeur est accessible en lecture et/ou écriture

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 16 Exercice – Tri fusion trier(debut, fin) { si (fin - debut < 2) { // Fin si (t[debut] > t[fin])‏ echanger(t[debut], t[fin])‏ } sinon { milieu = (debut + fin) / 2 trier(debut, milieu)‏ trier(milieu + 1, fin)‏ triFusion(debut, fin) // Tri fusion des moitiés }

Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 17 Exercice – Tri fusion Les deux tris qui sont effectués avant la fusion sont indépendants l'un de l'autre et il est donc “facile” de les faire s’exécuter en parallèle par deux threads Implanter une version « threadée » de cet algorithme de tri en les synchronisant avec la méthode join Implanter une autre version « threadée » de cet algorithme de tri en les synchronisant avec les méthodes wait et notify