Programmation des réseaux avec Java

Programmation concurente: les threads en Java


Exercice 1 - Problèmes d'exclusion mutuelle

On cherche à étudier le comportement d'un objet modifié par plusieurs threads.

  1. Écrire une classe Point avec deux champs entiers x et y, une méthode void set(int x, int y) (qui déplace le point aux coordonnées passées en arguments) et une méthode toString() qui affiche ce point au format (x,y) ;
  2. Écrire une classe Imp ayant un constructeur prenant en paramètre un Point et un entier i. La classe Imp possède une méthode run() qui démarre un processus léger qui appelle la méthode set(i,i) sur le point puis l'affiche, et ce dans une boucle infinie.

Créer deux instances de la classe Imp construites avec la même instance de Point, p, et des valeurs différentes (par exemple, Imp(p,1) pour l'un et Imp(p,2) pour l'autre).

Démarrer les deux instances. Quels sont les différents affichages possibles pour le point ? Résoudre le problème.

Exercice 2 - Producteur et consommateur

On désire développer une petite application simulant les comportements concurrents d'un ensemble de producteurs et de consommateurs de messages. D'un côté, les producteurs produisent des messages qu'ils stockent dans une file d'attente commune ; de l'autre, les consommateurs récupèrent dans ce même buffer les messages (dans l'ordre où ils y ont été placés).

On doit respecter un certain nombre de contraintes et pouvoir paramétrer l'application :

  1. un producteur ne peut produire un message que si le buffer n'est pas plein et, bien sûr, un consommateur ne peut lire un message que si le buffer n'est pas vide;
  2. le débit de chaque producteur et de chaque consommateur est paramétrable à sa construction (il représente le temps d'attente entre deux productions ou deux consommations).

Etienne.Duris[at]univ-mlv.fr - © Université de Marne-La-Vallée - Décembre 2003