![]() |
Threads et exclusion mutuelle |
Écrire une classe Printer implantant l'interface
java.lang.Runnable qui contient un identifiant (entier),
une durée et un texte.
La méthode run() se contentera d'afficher
toutes les durée milliseconds un message contenant
l'identifiant suivi du texte :
id 1 - Texte1 id 2 - Texte2Utiliser Thread.sleep() pour faire patienter le programme.
On cherche à étudier le comportement d'un objet modifié par plusieurs threads.
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 ? Identifier une séquence d'exécution possible qui permet d'aboutir à chaque type d'affichage obtenu et corriger les problèmes rencontrés.
Écrire un programme qui créé et démarre dix processus légers exécutant les
méthodes run de dix instances d'une classe Bill
implantant Runnable. Chaque processus léger exécutera une boucle
infinie affichant un message identifiant.
Le but du jeu est qu'un utilisateur tape au clavier l'identifiant d'un
processus léger et que celui-ci disparaisse (qu'il soit interrompu)
en affichant "ahhhh je meurs" suivi de son identifiant.
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 :
Écrire les classes Producer et Consumer permettant de mettre en oeuvre ces spécifications. Dans un premier temps, vous ne pourrez utiliser que les classes Thread, Runnable et LinkedList (utilisée à travers l'interface Queue. Chaque producteur et consommateur sera exécuté par un processus léger (Thread) différent, en concurrence avec les autres. Vous pouvez utiliser d'autres threads.
Consultez la documentation de la classe java.util.concurrent.BlockingQueue et modifier votre programme.