Contenu du cours
Multithreading en Java
Multithreading en Java
Défi Verrou et Condition
Description de la tâche
Imaginez que vous concevez un contrôleur de feux de circulation pour une intersection très fréquentée. Le système de feux de circulation se compose de trois étapes : feu rouge, feu jaune et feu vert. Ces étapes doivent être exécutées dans un ordre spécifique pour assurer un flux de trafic sûr et efficace.
Votre tâche est d'implémenter les méthodes : redLight()
, yellowLight()
, et greenLight()
. Ces méthodes doivent être exécutées strictement dans l'ordre d'un vrai feu de circulation : d'abord feu rouge, puis feu jaune, et enfin feu vert, quel que soit l'ordre dans lequel les threads les appellent.
Exigences :
- Synchronisation : Assurez-vous que les méthodes sont exécutées dans un ordre strict ;
- Multithreading : Les méthodes peuvent être appelées à partir de différents threads, mais l'exécution doit se faire dans l'ordre :
redLight()
,yellowLight()
, etgreenLight()
; - Utiliser Lock et Condition : Appliquez
Lock
pour contrôler l'accès aux ressources partagées etCondition
pour coordonner les threads.
Indice
Le champ
counter
dans la classeTaskLockExample
est spécifié pour une raison, vous devrez vérifier sa valeur dans chaque méthode et en fonction de ce qui s'y trouve, vous décidez si vous démarrez ce thread ou non.
Vous devez également utiliser les champs lock
et condition
pour verrouiller certains threads et décider qui sera premier, deuxième, troisième.
Une fois que vous avez implémenté les méthodes et que vous êtes passé à la classe Main
et que vous avez exécuté sa méthode main, vous devriez avoir une sortie, peu importe l'ordre et quel thread exécute quelle méthode.
Aussi, imprimez quelque chose sur la console pour vérifier si les méthodes sont exécutées dans le bon ordre.
Remarque
Vous pouvez également échanger le démarrage des threads (pas l'implémentation elle-même, mais là où la méthode
start()
du thread est appelée)
Une fois que vous êtes sûr que tout fonctionne, exécutez les tests de vérification sur le chemin /src/test/java/TaskLockExampleTest.java
.
Merci pour vos commentaires !