On souhaite pouvoir représenter des élèves faisant des taches différentes en même temps. Par exemple, pendant que Samuel fait le clown, Tiffany ecoute du Marylin Manson, et Fabien fait un sandwich. Pour cela :
- écrire une classe implantant l'interface Runnable, prennant en paramêtre un String, et l'affichant en boucle/
- utiliser cette classe dans un main pour simuler 5 élèves en paralèlle
- observer le résultat
Exercice 2 - Mettre en attente
On souhaite que les différentes taches prennent chacune un certain temps. Modifier la classe précedente pour qu'elle prenne également un temps d'attente (en millisecondes) entre deux afficahges.
Exercice 3 - Modification de plusieurs variables en concurrence
On souhaite créer deux threads qui changent les coordonnées d'un même point:
public class Point {
private int x;
private int y;
public void move(int x,int y) {
this.x=x;
this.y=y;
}
@Override public String toString() {
return "("+x+','+y+')';
}
public static void main(String[] args) {
final Point p=new Point();
for(int i=0;i<2;i++) {
final int id=i;
new Thread(new Runnable() {
public void run() {
for(;;) {
p.move(id,id);
System.out.println(p);
}
}
}).start();
}
}
}
-
Vérifier en utilisant grep que le code affiche
des points (0,1) ou (1,0).
Expliquer pourquoi.
-
Créer des sections critiques en utilisant un bloc synchronized
là où il faut pour que seuls des points (0,0) et (1,1) puisse être affichés.
© Université de Marne-la-Vallée