• Aucun résultat trouvé

M1 Programmation avanc´ee et r´epartie en Java : TP 4

N/A
N/A
Protected

Academic year: 2022

Partager "M1 Programmation avanc´ee et r´epartie en Java : TP 4"

Copied!
2
0
0

Texte intégral

(1)

M1 Programmation avanc´ee et r´epartie en Java : TP 4

Jean Fortin et Fr´ed´eric Gava

gava@u-pec.fr ou jean.fortin@gmail.com

1 Exercice 1

1. Ecrire une classeExo1, contenant un champ priv´e i, de type entier, initialis´e `a 1.

2. Ajouter une m´ethodetestModif, qui effectue les trois lignes de code suivantes : System.out.println(i);

i = 2*i;

i = i-1;

3. Cr´eer une classe interne impl´ementant Runnable, dont la m´ethode run appelle la m´ethode testModifdans une boucle infinie.

4. Cr´eer une m´ethodelancerThread (dans la classe principale) cr´eant un Thread bas´e sur le Runnable ci-dessus, et le d´emarrant.

5. Dans une m´ethodemain, cr´eer un objet de la classe, et tester en lan¸cant 3 threads en parall`ele.

6. Dans la m´ethodetestModif, ajouter entre les deux modifications dei la cr´eation et suppression d’un fichier temporaire. Tester, et interpr´eter le r´esultat.

7. Modifier le programme pour ´eviter le probl`eme constat´e `a la question pr´ec´edente.

2 Exercice 2

On consid`ere l’exemple d’un Thread Patience.

Thread patience = new Thread() { public void run() {

while(!isInterrupted()) { System.out.print(‘.’) ; }

} };

patience.start() ;

... //on fait des tas de choses patience.interrupt() ;

try {

patience.join() ;

} catch(InterrruptedException xc) { ...}

Ce thread va afficher des points pendant le traitement lourd effectu´e dans le thread principal, afin que l’utilisateur voit que le programme n’est pas bloqu´e.

1

(2)

1. Compiler et tester un programme avec ce code.

2. Le Thread “patience” ne marche pas de fa¸con compl`etement satisfaisante. Le modifier de fa¸con `a ce qu’il tente d’alterner son ex´ecution avec le Thread principal qui l’a cr´e´e (pour un test essayer par exemple que l’un affiche “ping” et l’autre “pong” -essayer d’abord avec yield puis avec sleep)

3. Faire en sorte que chaque fois qu’un des threads commence `a afficher un “Ping” (ou un

“Pong”) il soit garanti qu’il puisse afficher 5 fois le mˆeme message cons´ecutivement.

(exemple : 5 Pings, 5 Pongs, 5 Pings, 5 Pings, etc...) -bien choisir l’objet support de la synchronisation

4. S’assurer que les messages vont alterner ( 5 pings, 5 pongs, etc.). Alternativement chaque processus se mettra en veille pour ensuite attendre que l’autre le “r´eveille”.

(la solution est tr`es simple, mais n’est pas imm´ediatement ´evidente !).

3 Exercice 3

En utilisant la classe Fifo (vue pr´ec´edemment) concevoir une file sp´eciale qui contient des Threads (appellons la ThreadPool). Ces threads sont particuliers :

– leur m´ethode run() est une boucle infinie

– en d´ebut de boucle le thread se met de lui-mˆeme dans le ThreadPool et se bloque en attente.

– maintenant lorsqu’on soumet un Runnable au ThreadPool, Ce dernier retire un thread, le r´eactive et lui fait ex´ecuter la m´ethode run du Runnable. Quand cette tˆache est termin´ee le thread se replace en d´ebut de boucle. etc.

– (question subsidiaire : `a quoi peut servir ce dispositif ?)

4 Exercice 4

– Cr´eer une classe repr´esentant une interface graphique pour un ´editeur de message basique, avec une zone de texte au centre, et deux boutons “Envoyer” et “Quitter” en bas. Dans cette question, on s’int´eresse simplement `a la disposition des composants, pas `a la gestion des ´evenements.

– Cr´eer une classe de test avec une m´ethode main pour tester votre interface. Bien penser `a utiliser la m´ethode invokeLater pour cela.

– Ajouter les gestionnaires d’´evenements pour les boutons. Le bouton Envoyer se contente d’afficher un pop-up avec le message “Pas disponible pour l’instant”. (Utiliser la classe JOptionPane)

– A l’aide d’un Worker Swing, sauvegarder toute les 10 secondes le texte ´ecrit dans un fichier “temp.txt”.

5 Exercice 5

Reprendre l’exercice 3 du TP3, mais utiliser cette fois un Worker swing pour effectuer le d´eroulement.

2

Références

Documents relatifs

— En suivant l’organisation d´ ecrite ci-dessus, la compilation des sources d’une s´ eance de TP peut se faire avec la commande suivante, en se pla¸ cant ` a la racine de

Il faut des classes final (ou record) pour maintenir la restriction de hi´ erarchie (branche) ou non−selead (mais cela limitera le

R´ ealiser en Swing un formulaire comprenant un champ de saisie, un bouton et une plage de texte (pour afficher la r´ eponse ` a la question). Utilisez un (ou plusieurs, si

dans le cas d’un mono-processeur/coeur, c’est le Thread demandeur qui ex´ ecute le code qui est actif. sinon, le temps de r´ ecup´ erer le bool´ een d’un (imaginaire) isActif(),

Cr´ eer une classe Balle, ´ etendant Thread, telle que le constructeur ajoute un JLabel dans le JPanel central ` a une position al´ eatoire, et que la m´ ethode run fasse bouger

Le thread qui ex´ ecute wait() est mis dans un pool d’attente ; quand il en sort il “revient” dans le bloc synchronized et entre en comp´ etition avec d’autres threads pour

1 M´ ethodes sp´ ecifiques aux Applets et qui leur permettent de demander au navigateur des informations ou des actions li´ ees au contexte : informations sur la page HTML

Cr´eer un programme Python permettant de r´ealiser le chiffrement ROT13 d’un fichier texte, puis cr´eer un programme Python permettant de r´ealiser le d´echiffrement.