Universit´
e de Provence
MASTER INFORMATIQUE
Programmation Parall`
ele
et Distribu´
ee
2011-2012
PRAM et Thread Java
1 Exercice d’introduction
1. ´
Ecrire un programme qui va lancer 10 Threads, o `
u chaque thread va afficher son num´
ero
deux fois (deux println distincts) sur la sortie standard. La premi`
ere fois on affichera le
num´
ero du Thread puis ”D´
ebut” et la deuxi`
eme fois on affichera puis le num´
ero du Thread
puis ”Fin”. Qu’observez-vous ? Ex´
ecuter plusieurs fois votre programme ? Voyez-vous des
diff´
erences ?
2. Changer votre programme pour que chaque Thread attende un temps al´
eatoire entre les
deux affichages de ses num´
eros. Le temps d’attente (fonction sleep()) devra ˆ
etre compris
entre 0 et 1000 millisecondes. Voyez-vous des diff´
erences avec l’ex´
ecution sans l’attente ?
Aide
Pour cr´
eer un thread, il faut impl´
ementer une classe ThreadPlus qui h´
erite de Thread avec le
mot cl´
e extends. La nouvelle classe doit impl´
ementer une m´
ethode static void run() qui est le code
ex´
ecut´
e par le thread. Pour ex´
ecuter un thread, il suffit de cr´
eer un objet tde la classe ThreadPlus
et d’utiliser la m´
ethode start() avec t.start().
Pour g´
en´
erer un nombre entre 0 et 1000, il suffit d’utiliser la m´
ethode random() de la classe
Math qui renvoie un r´
eel pseudo-al´
eatoire entre 0 et 1, et de multiplier le r´
esultat par 1000. En-
suite, il suffit d’utiliser ce double navec sleep((int)n). Il est `
a noter que puisque sleep peut lancer
une erreur de type InterruptedException, il faudra la placer `
a l’int´
erieur d’un bloc try catch.
2 Variable partag´ee
Dans cet exercice, on s’int´
eresse aux variables partag´
ees et aux diff´
erentes fac¸ons de synchro-
niser les threads pour ´
eviter les comportements anormaux.
1. Ex´
ecuter plusieurs fois le code de VariablePartagee.java (disponible `
ahttp:
//pageperso.lif.univ-mrs.fr/˜arnaud.labourel/PPD/codeTP1/
VariablePartagee.java). Qu’observez vous ? Expliquer le rˆ
ole du mot-cl´
e vola-
tile.
2. Ex´
ecuter plusieurs fois le code de VariablePartageeSynchronized.java (disponible `
a
http://pageperso.lif.univ-mrs.fr/˜arnaud.labourel/PPD/codeTP1/
VariablePartageeSynchronized.java) Qu’observez vous ? Expliquer le rˆ
ole du
mot-cl´
e synchronized.
3. Ex´
ecuter le code de VariablePartageeBienSynchronized.java (disponible `
a
http://pageperso.lif.univ-mrs.fr/˜arnaud.labourel/PPD/codeTP1/
VariablePartageeBienSynchronized.java) Qu’observez vous ? Quelles sont les
diff´
erences ?
4. Proposer une solution compl`
ete de synchronisation.
1