Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Documents pareils
J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Synchro et Threads Java TM

Notion de thread (1/2)

INITIATION AU LANGAGE JAVA

Introduction : les processus. Introduction : les threads. Plan

Threads. Threads. USTL routier 1

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

On appelle variable condition une var qui peut être testée et

Un ordonnanceur stupide

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Introduction à la programmation concurrente

Exercices INF5171 : série #3 (Automne 2012)

PIGOURIER Vincent ANNEE SPECIALE 99/00 RAPPORT DE PROJET : LES THREADS JAVA. Responsable : Serge Rouveyrol

Héritage presque multiple en Java (1/2)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Projet gestion d'objets dupliqués

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Initiation à JAVA et à la programmation objet.

TD2 Programmation concurrentielle

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Remote Method Invocation Les classes implémentant Serializable

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Les Threads. Sommaire. 1 Les Threads

Sixième partie. Programmation multi-activités Java & Posix Threads. Généralités Java Threads POSIX Threads Autres approches

Problèmes liés à la concurrence

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Chapitre 2. Classes et objets

Calcul Parallèle. Cours 5 - JAVA RMI

Programmation par les Objets en Java

La JVM. La machine virtuelle Java. La JVM. La JVM

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Développement Logiciel

4. Outils pour la synchronisation F. Boyer, Laboratoire Sardes

Auto-évaluation Programmation en Java

Une introduction à Java

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Projet Active Object

Cours 2: Exclusion Mutuelle entre processus (lourds, ou légers -- threads)

Une introduction à la technologie EJB (2/3)

TP1 : Initiation à Java et Eclipse

LOG4430 : Architecture et conception avancée

ACTIVITÉ DE PROGRAMMATION

Processus, threads et gestion de la synchronisation

Support de cours Java

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Programmation d Applications Concurrentes et Distribuées (INF431)

Diagramme de classes

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

RMI le langage Java XII-1 JMF

<Insert Picture Here> Solaris pour la base de donnés Oracle

Programmer en JAVA. par Tama

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Les processus légers : threads. Système L3, /31

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Généralités sur le Langage Java et éléments syntaxiques.

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Performances de la programmation multi-thread

Cours de Génie Logiciel

Modèle à composants. Daniel Hagimont. IRIT/ENSEEIHT 2 rue Charles Camichel - BP TOULOUSE CEDEX 7. Remerciements

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Jacques Lonchamp. Conception. d applications en Java/JEE. Principes, patterns et architectures

Android UIThread, Thread, Handler et AsyncTask

Les connexions sans fil avec Android. JMF (Tous droits réservés) 1

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Desktop Intégration. Rémi Forax

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Java 7 Les fondamentaux du langage Java

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Introduction aux systèmes temps réel. Iulian Ober IRIT

Cours de Systèmes d Exploitation

Cours 1: Java et les objets

Chapitre 10. Les interfaces Comparable et Comparator 1

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Programmation concurrente et Java. Les Threads en Java : une première approche

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Java. Mémoire présenté à la Faculté des études supérieures de l'université Laval pour l'obtention du grade de Maître ès Sciences (MSc.

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

Package Java.util Classe générique

TD/TP PAC - Programmation n 3

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Environnements de développement (intégrés)

Objets et Programmation. origine des langages orientés-objet

Cours Programmation Système

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Java avancé Objectifs. version support 1.2

Programmation Concurrente. Rémi Forax

Transcription:

Info0604 Programmation multi-threadée Cours 5 Programmation multi-threadée en Java Pierre Delisle Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique 18 février 2015

Plan de la séance Développement de programmes multi-thread en Java Principe de fonctionnement Exemples Synchronisations Méthodes et instructions synchronisées Verrous (mutex) Blocs gardés (variables de condition) Interruption

Application multi-thread Java Chaque thread est associé à une instance de la classe Thread 2 façons de procéder Instanciation d'une sous-classe de la classe Thread Implémentation de l'interface Runnable

La classe Thread java.lang.thread Thread fondamental de l'api Java 2 constructeurs de base (il y en a d'autres) Thread() Thread (Runnable objet) Quelques méthodes run(), start() getid(), getstate() join()

Première méthode : Instanciation d'une sous-classe de Thread

Étapes de développement Conception d'une classe qui hérite de la classe Thread Définition de la méthode run dans cette classe Création d'instances de cette classe Démarrage de l'exécution par l'appel de la méthode start (qui appelle implicitement la méthode run)

public class MonThread extends Thread { public MonThread ( ) {... } Structure d'une classe et de l'exécution } public void run () { /*Cette méthode sera exécutée lors de l'appel de la méthode start() /*... } public class programme { public static void main (String [ ] args) { MonThread unthread; MonThread unautrethread; unthread = new MonThread(...); unautrethread = new MonThread(...); unthread.start(); unautrethread.start(); } } Exemple

Deuxième méthode Implémentation de l'interface Runnable

L'interface Runnable Doit être implémentée par la classe que l'on veut exécuter dans un thread Définit une seule méthode : run Contient le code exécuté dans le thread L'objet Runnable est passé au constructeur de Thread

Étapes de développement Conception d'une classe (n'héritant pas de Thread) qui implémente l'interface Runnable Définition de la méthode run dans cette classe Création d'instances de la classe Création d'instances de la classe Thread en passant au constructeur les instances de la classe développée Démarrage de l'exécution par l'appel de la méthode start (qui appelle implicitement la méthode run)

public class MonThread implements Runnable { public MonThread ( ) {... } Structure d'une classe et de l'exécution } public void run () { /*Cette méthode sera exécutée lors de l'appel de la méthode start() /*... } public class programme { public static void main (String [ ] args) { Thread unthread; Thread unautrethread; unthread = new Thread(new MonThread(...)); unautrethread = new Thread(new MonThread(...)); unthread.start(); unautrethread.start(); } } Exemple

Quelle méthode utiliser? Instanciation d'une sous-classe de la classe Thread Plus simple à utiliser Problématique lorsque la classe à exécuter est déjà une sous-classe (pas d'héritage multiple en Java) Implémentation de l'interface Runnable Plus générale et plus flexible Séparation de la tâche à exécuter et de l'exécution elle-même

Synchronisations

Les verrous en Java Les mécanismes de synchronisation sont basés sur une entité de verrou «interne» à Java Verrou intrinsèque (instrinsic lock ou monitor lock) Chaque objet a un verrou intrinsèque associé Assure la protection et la visibilité mémoire 2 techniques de base de synchronisation Méthodes synchronisées (synchronized methods) Instructions de synchronisation (synchronized statements)

Méthodes synchronisées Déclaration de méthodes synchronized Quand un thread appelle une méthode synchronisée d'un objet, il acquiert le verrou de cet objet Le verrou est libéré à la fin de la méthode Si un autre thread appelle une méthode synchronisée de cet objet, il sera bloqué jusqu'à la libération du verrou Exemple

Instructions de synchronisation Permettent une concurrence (parallélisme) plus fine que les méthodes synchronisées Instruction synchronized (Object lock) Définit un bloc d'instructions exécuté dans une section critique Spécifie un objet qui fournira le verrou intrinsèque (mutex) Si deux blocs spécifient des objets différents, ils pourront être exécutés en parallèle Exemple

Blocs gardés (guarded blocks) Débutent en vérifiant une condition Le bloc sera exécuté lorsque la condition sera vraie À l'intérieur du bloc Méthode wait : permet de mettre le thread en attente (nécessite l'acquisition préalable du verrou) Méthode notifyall (similaire au broadcast) : permet de réveiller les threads en attente en les informant qu'un événement s'est produit Exemple

Thread.sleep() Suspend l'exécution du thread pour une durée spécifiée en millisecondes Thread.sleep(4) 4 millisecondes Permet l'exécution d'autres threads Lance une exception de type InterruptedException si un autre thread interrompt le thread durant le sleep

Interruptions Méthode interrupt() monthread.interrupt(); Indication à un thread qu'il devrait arrêter de faire ce qu'il fait Le programmeur décide comment le thread répond à l'interruption (catch/throw) Par exemple le terminer en retournant de la méthode run Le thread doit gérer sa propre interruption Exemple

Pour aller plus loin Java offre des fonctionnalités avancées de programmation multi-thread Gestion des priorités Groupes de threads Objets Lock Interface Executor Variables atomiques... http://java.sun.com/docs/books/tutorial/essential/concurrency/index.html

La semaine prochaine Pas de semaine prochaine, c'est terminé Pour en savoir plus : Info0802 Programmation parallèle et multi-coeur ( suite à Info0604) Info0804 Recherche opérationnelle ( suite à Info0501)