Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Défi : Lock et Condition | Mécanismes de Synchronisation de Haut Niveau
Multithreading en Java

bookDéfi : Lock et Condition

Description de la tâche

Imaginez que vous concevez un contrôleur de feux de circulation pour un carrefour très fréquenté. Le système de feux de circulation comprend trois phases : feu rouge, feu jaune et feu vert. Ces phases doivent être exécutées dans un ordre spécifique afin de garantir une circulation sûre et efficace.

L'objectif 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 feu de circulation réel : d'abord feu rouge, puis feu jaune, et enfin feu vert, quel que soit l'ordre dans lequel les threads les appellent.

Exigences :

  • Synchronisation : Garantir que les méthodes sont exécutées dans un ordre strict ;
  • Multithreading : Les méthodes peuvent être appelées depuis différents threads, mais l'exécution doit se faire dans l'ordre : redLight(), yellowLight(), puis greenLight() ;
  • Utilisation de Lock et Condition : Utiliser Lock pour contrôler l'accès aux ressources partagées et Condition pour coordonner les threads.
Note
Remarque

Le champ counter dans la classe TaskLockExample est spécifié pour une raison précise, il sera nécessaire de vérifier sa valeur dans chaque méthode et, en fonction de cette valeur, de décider si ce thread doit démarrer ou non.

Vous devez également utiliser les champs lock et condition pour verrouiller un thread 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 exécuté sa méthode main, vous devriez obtenir une sortie quel que soit l'ordre et le thread qui exécute chaque méthode.

De plus, affichez quelque chose dans la console pour vérifier si les méthodes sont exécutées dans le bon ordre.

Note
Remarque

Vous pouvez également échanger le démarrage des threads (pas l'implémentation elle-même, mais l'endroit où la méthode start() du thread est appelée)

Une fois que vous êtes certain que tout fonctionne, exécutez les tests de vérification sur le chemin /src/test/java/TaskLockExampleTest.java.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 2

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 3.33

bookDéfi : Lock et Condition

Glissez pour afficher le menu

Description de la tâche

Imaginez que vous concevez un contrôleur de feux de circulation pour un carrefour très fréquenté. Le système de feux de circulation comprend trois phases : feu rouge, feu jaune et feu vert. Ces phases doivent être exécutées dans un ordre spécifique afin de garantir une circulation sûre et efficace.

L'objectif 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 feu de circulation réel : d'abord feu rouge, puis feu jaune, et enfin feu vert, quel que soit l'ordre dans lequel les threads les appellent.

Exigences :

  • Synchronisation : Garantir que les méthodes sont exécutées dans un ordre strict ;
  • Multithreading : Les méthodes peuvent être appelées depuis différents threads, mais l'exécution doit se faire dans l'ordre : redLight(), yellowLight(), puis greenLight() ;
  • Utilisation de Lock et Condition : Utiliser Lock pour contrôler l'accès aux ressources partagées et Condition pour coordonner les threads.
Note
Remarque

Le champ counter dans la classe TaskLockExample est spécifié pour une raison précise, il sera nécessaire de vérifier sa valeur dans chaque méthode et, en fonction de cette valeur, de décider si ce thread doit démarrer ou non.

Vous devez également utiliser les champs lock et condition pour verrouiller un thread 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 exécuté sa méthode main, vous devriez obtenir une sortie quel que soit l'ordre et le thread qui exécute chaque méthode.

De plus, affichez quelque chose dans la console pour vérifier si les méthodes sont exécutées dans le bon ordre.

Note
Remarque

Vous pouvez également échanger le démarrage des threads (pas l'implémentation elle-même, mais l'endroit où la méthode start() du thread est appelée)

Une fois que vous êtes certain que tout fonctionne, exécutez les tests de vérification sur le chemin /src/test/java/TaskLockExampleTest.java.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 2
some-alt