Herausforderung: Lock und Condition
Aufgabenbeschreibung
Stellen Sie sich vor, Sie entwerfen einen Ampelcontroller für eine stark befahrene Kreuzung. Das Ampelsystem besteht aus drei Phasen: Rotlicht, Gelblicht und Grünlicht. Diese Phasen müssen in einer bestimmten Reihenfolge ausgeführt werden, um einen sicheren und effizienten Verkehrsfluss zu gewährleisten.
Ihre Aufgabe ist es, die Methoden redLight(), yellowLight() und greenLight() zu implementieren. Diese Methoden müssen strikt in der Reihenfolge einer echten Ampel ausgeführt werden: zuerst Rotlicht, dann Gelblicht und schließlich Grünlicht, unabhängig davon, in welcher Reihenfolge die Threads sie aufrufen.
Anforderungen:
- Synchronisation: Sicherstellen, dass die Methoden in strikter Reihenfolge ausgeführt werden;
- Multithreading: Die Methoden können von verschiedenen Threads aufgerufen werden, aber die Ausführung muss in der Reihenfolge erfolgen:
redLight(),yellowLight()undgreenLight(); - Verwendung von Lock und Condition: Verwenden Sie
Lock, um den Zugriff auf gemeinsame Ressourcen zu steuern, undCondition, um die Threads zu koordinieren.
Das Feld counter in der Klasse TaskLockExample ist aus einem bestimmten Grund angegeben. Sie müssen seinen Wert in jeder Methode überprüfen und je nachdem, was dort steht, entscheiden, ob Sie diesen Thread starten oder nicht.
Sie müssen außerdem die Felder lock und condition verwenden, um einen Thread zu sperren und zu bestimmen, wer Erster, Zweiter, Dritter ist.
Nachdem Sie die Methoden implementiert haben und zur Klasse Main gewechselt sind und deren main-Methode ausführen, sollten Sie eine Ausgabe erhalten, unabhängig davon, in welcher Reihenfolge und welcher Thread welche Methode ausführt.
Geben Sie außerdem etwas auf der Konsole aus, um zu überprüfen, ob die Methoden in der richtigen Reihenfolge ausgeführt werden.
Sie können auch den Start der Threads tauschen (nicht die Implementierung selbst, sondern dort, wo die start()-Methode des Threads aufgerufen wird)
Sobald Sie sicher sind, dass alles funktioniert, führen Sie die Überprüfungstests im Pfad /src/test/java/TaskLockExampleTest.java aus.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 3.33
Herausforderung: Lock und Condition
Swipe um das Menü anzuzeigen
Aufgabenbeschreibung
Stellen Sie sich vor, Sie entwerfen einen Ampelcontroller für eine stark befahrene Kreuzung. Das Ampelsystem besteht aus drei Phasen: Rotlicht, Gelblicht und Grünlicht. Diese Phasen müssen in einer bestimmten Reihenfolge ausgeführt werden, um einen sicheren und effizienten Verkehrsfluss zu gewährleisten.
Ihre Aufgabe ist es, die Methoden redLight(), yellowLight() und greenLight() zu implementieren. Diese Methoden müssen strikt in der Reihenfolge einer echten Ampel ausgeführt werden: zuerst Rotlicht, dann Gelblicht und schließlich Grünlicht, unabhängig davon, in welcher Reihenfolge die Threads sie aufrufen.
Anforderungen:
- Synchronisation: Sicherstellen, dass die Methoden in strikter Reihenfolge ausgeführt werden;
- Multithreading: Die Methoden können von verschiedenen Threads aufgerufen werden, aber die Ausführung muss in der Reihenfolge erfolgen:
redLight(),yellowLight()undgreenLight(); - Verwendung von Lock und Condition: Verwenden Sie
Lock, um den Zugriff auf gemeinsame Ressourcen zu steuern, undCondition, um die Threads zu koordinieren.
Das Feld counter in der Klasse TaskLockExample ist aus einem bestimmten Grund angegeben. Sie müssen seinen Wert in jeder Methode überprüfen und je nachdem, was dort steht, entscheiden, ob Sie diesen Thread starten oder nicht.
Sie müssen außerdem die Felder lock und condition verwenden, um einen Thread zu sperren und zu bestimmen, wer Erster, Zweiter, Dritter ist.
Nachdem Sie die Methoden implementiert haben und zur Klasse Main gewechselt sind und deren main-Methode ausführen, sollten Sie eine Ausgabe erhalten, unabhängig davon, in welcher Reihenfolge und welcher Thread welche Methode ausführt.
Geben Sie außerdem etwas auf der Konsole aus, um zu überprüfen, ob die Methoden in der richtigen Reihenfolge ausgeführt werden.
Sie können auch den Start der Threads tauschen (nicht die Implementierung selbst, sondern dort, wo die start()-Methode des Threads aufgerufen wird)
Sobald Sie sicher sind, dass alles funktioniert, führen Sie die Überprüfungstests im Pfad /src/test/java/TaskLockExampleTest.java aus.
Danke für Ihr Feedback!