page : 1Java
La programmation concurrente
page : 2Java
Introduction
Dans de nombreux contextes, il est
intéressant d'effectuer plusieurs traitements
distincts en même temps
Application réseau
En même temps ne signifie pas une
simultanéité parfaite
Il est possible de simuler l'exécution simultanée de
deux traitements en leur permettant d'avoir accès,
chacun à leur tour, au processeur
On dit que les traitements sont CONCURRENTS
zPuisqu'ils sont en concurrence permanent pour
l'accès au processeur
page : 3Java
Prog. Concurrente en Java
Deux mécanismes permettent
l'ordonnancement automatique des traitements
La concurrence entre commandes du système
correspondant à des processus
La concurrence entre processus léger (threads) de la
machine virtuelle, qui correspondent à différents traitements
au sein d'un même processus
Ces mécanismes créent de nouveaux
problèmes liés à :
La synchronisation,
L'exclusion mutuelle
La vivacité
page : 4Java
Processus Vs Threads
page : 5Java
Les processus
page : 6Java
Les processus
Processus : unité d'exécution gérée par le
système
En Java, il est possible d'accéder à ce
mécanisme pour gérer la concurrence via les
classes
Runtime représentant un environnement d'exécution
Process représentant un processus
Les possibilités d'interaction sont limitées et cela interdit
une gestion fine de la concurrence entre les processus
En java : il est possible de lancer l'exécution de
commandes quelconques en concurrence avec une
application Java
page : 7Java
Créer un processus
A toute application Java est associé un objet
de contrôle de son unité d'exécution :
Objet de la classe Runtime
Cet objet est obtenu par la méthode statique
Runtime.getRuntime();
Cet objet permet d'obtenir des informations
Concernant la mémoire
ztotalMemory()
zfreeMemory()
D'appeler le ramasse-miettes
zgc()
De terminer l'application courante
zexit( int val )
page : 8Java
Créer un processus
L'objet Runtime permet de
Créer et démarrer l'exécution d'une autre commande
Démarrer l'exécution d'une autre commande
Méthodes surchargées exec() de l'objet runtime
zLe processus appelant : processus PERE
zLe processus appelé : processus FILS
Exemples:
Runtime.getRuntime.exec("javac TP1.java");
Runtime.getRuntime.exec( new String[] {
"javac", "TP2.java" } );
zL'objet retourné est de la classe Process et permet
de contrôler le processus fils
page : 9Java
Mort d'un processus
La méthode destroy()
Appelée sur un objet de la classe Process contrôlant un
processus FILS, permet de demander sa terminaison
Attente
Un processus PERE peut également attendre la mort d'un
processus fils grâce à la méthode waitFor() appliquée à
l'objet processus du fils
Cette méthode attend que le processus fils termine (l'attente
est dite BLOQUANTE)
Au moment de sa terminaison, un processus retourne un
entier (le paramètre de la méthode exit() de son objet
runtime) dont la valeur peut être obtenue par la méthode
exitValue()
0 pour un processus forcé par destroy()
page : 10Java
Communiquer par les flots
L'objet processus permet également de
récupérer des flots connectés
à l'entrée standard
à la sortie standard
à la sortie erreur
du processus fils
La méthode getOutputStream() appelée sur un objet
processus d'un fils permet au processus père de
récupérer un flot en écriture connecté à l'entrée
standard de ce fils
Symétriquement, les méthodes getInputStream() et
getErrorStream() retournent des flots en lecture
permettant au père de lire les sorties standard et
d'erreur du processus fils
1 / 31 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !