DEUG MIAS Option Info Introduction JAVA - PowerPoint PPT Presentation

1 / 39
About This Presentation
Title:

DEUG MIAS Option Info Introduction JAVA

Description:

Ailleurs... Partie Utile. Page : 11. Introduction JAVA : conteneurs ... Ailleurs... Impl menter l'interface Runnable. Page : 12. Introduction JAVA : conteneurs ... – PowerPoint PPT presentation

Number of Views:56
Avg rating:3.0/5.0
Slides: 40
Provided by: sig9
Category:

less

Transcript and Presenter's Notes

Title: DEUG MIAS Option Info Introduction JAVA


1
DEUG MIAS Option Info Introduction à JAVA
  • Olivier Sigaud
  • LIP6/AnimatLab
  • olivier.sigaud_at_lip6.fr
  • 01.44.27.88.53

2
Plan du cours 9Threads et Réflexivité
  • Threads
  • Définition
  • Création des Threads
  • Gestion des priorités
  • Synchronisation
  • Réflexivité

3
Définition
  • Thread séquence autonome dexécution
    dinstructions au sein dun programme
  •  Donne lillusion de parallélisme sur une machine
    monoprocesseur
  • Délivre un parallélisme réel sur une machine
    multiprocesseur

4
Nature des Threads
  • Un Thread est un processus
  • Léger pas de réservation de ressources système
    (fichiers, canaux, signaux),
  • Simple 1 registre Compteur de Programme et une
    pile.
  • Sur un ordinateur, à un instant donné,
  • il ny a quUN SEUL THREAD en cours dexécution,
    et éventuellement dautres threads en attente
    dexécution

5
Mémoire partagée
  • Tous les Threads partagent le même espace mémoire
    au sein de la machine virtuelle
  • Ils peuvent accéder à tous les objets publics
  • Ils peuvent modifier tous les objets publics

6
Lancement des Threads
  • Au démarrage de la JVM,
  • création dun seul Thread, qui appelle la méthode
    main(String args) de la classe principale
  • La JVM continue dexécuter les threads jusquà ce
    que
  • la méthode exit() de la classe Runtime soit
    appelée (si permission du security manager)
  • tous les threads soient morts, soit par fin de la
    méthode run(), soit par propagation dune
    exception hors de la méthode run().

7
Pour créer des Threads
  • Deux méthodes, un point commun
  •  écrire une méthode run() qui fait
  • ce que doit faire le thread. 
  • Méthode 1 Dériver une classe de Thread.
  • Méthode 2 implémenter linterface Runnable.

8
Linterface Runnable
  • interface Runnable
  • public abstract void run()
  • Un objet  runnable  est un objet que lon peut
    lancer en faisant run()

9
La classe Thread
  • public class Thread implements Runnable
  • public static final int MAX_PRIORITY, MIN
    _PRIORITY, NORM _PRIORITY
  • public Thread()
  • public Thread(String name)
  • public static Thread currentThread()
  • public static void sleep(long millis)
  • public static void yield()
  • public static void suspend()
  • public static void resume()
  • public static void start()
  • public static void stop()
  • public static void run()

10
  • Dériver une classe de Thread

public class SimpleThread extends Thread
public void run() while(true)
Quelque part.
Partie Utile
SimpleThread unSimpleThread new
SimpleThread() unSimpleThread.start()
Ailleurs...
11
  • Implémenter linterface Runnable

public class Clock implements Runnable public
void run() while(true)
Quelque part.
Partie Utile
Clock uneClock new Clock() Thread thread
new Thread(uneClock) thread.start()
Cible Runnable
Ailleurs...
12
Etats dun thread (cycle de vie)
 IllegalThreadStateException 
Naissance
mort
fin de run()
start()
- I/O bloquante
- wait()
- sleep()
Executable
Non Executable
- délai écoulé
- notify()
- I/O débloquée
13
Comment arrêter un thread ?
  • Pas de méthode ad-hoc
  • (stop, suspend, etc. sont DEPRECATED)
  • Il faut que la méthode run() termine delle-même

Exemple public void run() (1) while
(compteur lt 100000) (2) while (varBool
true)
14
Gestion des Threads
  • Pour le système, gérer des threads, cest.
  • Gérer le partage du temps
  • Gérer des priorités
  • Modèle de gestion des threads par la JVM
  • fixed priority scheduling (algorithme
    déterministe)

15
Gestion par priorités assignées
Priorité croissante
 manège  (round robin)
thread de priorité supérieure gt Préemption.
Il est préférable que chaque thread rende la main
de manière volontaire (éviter les threads
égoïstes)
16
Certaines implémentations de Java permettent un
vrai temps partagé Exemple 2 threads de
priorité identiques sont alternativement
choisisDautres implémentations ne le
permettent pas
Une Difficulté
17
Green threads et native threads
  • Green thread thread dorigine
  • Native thread dépend de limplémentation

MonoProcesseur
MultiProcesseur
18
  • Native Threads
  • reposent en général sur une implémentation
    efficace de multithreading par le système
    dexploitation
  • bonne rotation entre threads, pas de famine..
  • Green Threads
  • une simulation de multithreading,
  • noffre quUNE GARANTIE la préemption en cas de
    priorité supérieure.
  • UN RISQUE la famine.
  • Donc Que vos threads soient polis !
  • (quils rendent la main deux-mêmes.)

19
Gestion des priorités (1)
  • Chaque thread possède une priorité
  • égale à NORM_PRIORITY (5)
  • définie entre MIN_PRIORITY (1) et MAX_PRIORITY
    (10),
  • constantes de la classe Thread
  • A tout moment, quand plusieurs threads sont
    runnables, le thread de plus haute priorité est
    choisi.
  • Si ce thread stoppe ou est suspendu pour une
    raison quelconque, alors, un thread de priorité
    inférieure peut sexécuter.

20
Gestion des priorités (2)
  • Si un thread de priorité supérieure doit
    sexécuter (fin de sleep(), fin dI/O,
    notify()), il y a préemption.
  • Le Runtime Java ne fera pas de préemption dun
    thread pour un autre de même priorité.
  • Le runtime Java ne fait pas de  time-slicing .
  • MAIS, il se peut que lOS sous-jacent SUPPORTE le
    time-Slicing
  • Moralité nécrivez pas de code dont le
    fonctionnement repose sur le time-slicing.

21
Exercice 1
  • Ecrire une classe Ping qui réalise un Thread qui
    affiche  Ping  à intervalle irrégulier
  • Ecrire une classe Pong qui réalise un Thread qui
    affiche  Pong  à intervalle irrégulier
  • Ecrire une classe Go qui lance les Threads Ping
    et Pong

22
Exercice 1 (1)
  • import java.io.
  • class Ping extends Thread
  • public void run()
  • try
  • while (true)
  • System.out.println( Ping )
  • sleep((long)500Math.random())
  • catch(InterruptedException e) return

23
Exercice 1 (2)
import java.io. class Pong extends
Thread public void run() try while
(true) System.out.println( Pong ) slee
p((long)500Math.random()) catch(Int
erruptedException e) return
24
Exercice 1 (3)
  • import java.io.
  • class Go
  • public static void main(String args)
  • Ping p1 new Ping()
  • Pong p2 new Pong()
  • p1.start()
  • p2.start()

25
La Synchronisation
26
Synchronisation. Pourquoi (1)?
Tous les objets sont partagés entre tous les
Threads
lecture
Objet UnObjet
lecture
calcul
double var
calcul
écriture
écriture
2 sections critiques non protégées
Thread 1
Thread 2
27
Section critique
  • Comment protéger une section critique ?
  • En java, par un bloc  synchronized  (bloc,
    méthode)
  • Un seul thread accède au code synchronized à un
    moment donné.
  • Protection efficace mais basique.
  • wait() met le thread en attente (sans perte de
    cycles CPU) et relâche le verrou
  • notify() et notifyAll() libèrent un ou tous les
    threads de létat wait

28
Producteur/Consommateur
- Un drapeau indique quune valeur a été
déposée - Un drapeau indique quune valeur a été
consommée
FichierObjet..
Méthode traditionnelle  Attente active 
Thread 1 (producteur)
Thread 2 (consommateur)
29
Exercice 2
  • Ecrire une classe Sem qui implémente un sémaphore
    elle contient un champ booléen curval et deux
    méthodes get(boolean val) et set(boolean val).
  • La méthode get(boolean val) attend que curval
    soit égal à val pour continuer
  • La méthode set(boolean val) positionne curval à
    val
  • Get et set définissent une section critique

30
Exercice 2 (2)
  • Modifier les classes Ping et Pong pour quelles
    affichent leur message chacune à leur tour

31
Solution Exercice 2 (1)
  • class Sem
  • boolean curval
  • Sem()curvaltrue
  • synchronized boolean get(boolean val)
  • while (val!curval)
  • trywait()catch(Exception e)
  • return true
  • synchronized voit set(boolean val)
  • curvalval
  • notify()

32
Solution Exercice 2 (2)
  • import java.io.
  • class Ping extends Thread
  • boolean semvaltrue
  • Sem m
  • public Ping(Sem m0)mm0
  • public void run()
  • try
  • while (true)
  • m.get(semval)
  • System.out.println( Ping )
  • m.set(!semval)
  • sleep((long)200Math.random())
  • catch(InterruptedException e) return

33
Solution Exercice 2 (3)
  • import java.io.
  • class Pong extends Thread
  • boolean semvalfalse
  • Sem m
  • public Pong(Sem m0)mm0
  • public void run()
  • try
  • while (true)
  • m.get(semval)
  • System.out.println( Pong )
  • m.set(!semval)
  • sleep((long)200Math.random())
  • catch(InterruptedException e) return

34
La Réflexivité
35
Réflexivité
  • Introspection
  • Un objet peut ltlt inspecter gtgt sa classe
  • Lenvironnement Java peut manipuler les classes
    dune application.
  • Exemples dutilisation
  • Debuggers,
  • Environnements danalyse,
  • Espions
  • Moyens
  • La classe dun objet EST un objet
  • Une classe quelconque est récupérable sous cette
    forme.
  • Les champs dune classe SONT des objets.

36
Méthodes pour la réflexivité
Dans un source Java if (monObjet instanceof
MaClasse) Vérifie si l'objet monObjet est bien
du type (ou sous-type de) MaClasse Méthode de
java.lang.Object public final Class getClass()
Renvoie la classe de l'objet (un objet de la
classe Class !) Méthode de java.lang.Class
public Class getInterfaces() Retourne un
tableau des Constructeurs publics. Méthode de
java.lang.Class public String getClass().getName(
) Renvoie le nom dune Classe
37
Méthodes de java.lang.Class
public Field getDeclaredFields()
throws SecurityException Retourne un
tableau des champs non hérités. public Method
getDeclaredMethods()
throws SecurityException Retourne un tableau des
méthodes non héritées. public Constructor
getConstructors()
throws SecurityException Retourne un tableau des
constructeurs publics.
38
java.lang.reflect
  • java.lang.reflect contient et définit les Classes
  • Field (attribut)
  • Array (création dynamique de tableaux)
  • Method (méthode dune classe)
  • Laccès à la réflexivité se fait sous contrôle du
    security manager.

39
Lheure, cest lheure !
Write a Comment
User Comments (0)
About PowerShow.com