Kursinhalt
Multithreading in Java
Multithreading in Java
Herausforderung Lock und Bedingung
Aufgabenbeschreibung
Stellen Sie sich vor, Sie entwerfen einen Ampelsteuerung 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 von der Reihenfolge, in der Threads sie aufrufen.
Anforderungen:
- Synchronisation: Stellen Sie sicher, dass die Methoden in strikter Reihenfolge ausgeführt werden;
- Multithreading: 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: Wenden Sie
Lock
an, um den Zugriff auf gemeinsame Ressourcen zu steuern, undCondition
, um Threads zu koordinieren.
Hinweis
Das
counter
-Feld in derTaskLockExample
-Klasse 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 auch die Felder lock
und condition
verwenden, um einige Threads zu sperren und zu entscheiden, wer erster, zweiter, dritter sein wird.
Sobald Sie die Methoden implementiert haben und zur Main
-Klasse gewechselt sind und deren Hauptmethode ausführen, sollten Sie eine Ausgabe erhalten, unabhängig davon, in welcher Reihenfolge und welcher Thread welche Methode ausführt.
Drucken Sie auch etwas auf die Konsole, um zu überprüfen, ob die Methoden in der richtigen Reihenfolge ausgeführt werden.
Hinweis
Sie können auch den Start der Threads tauschen (nicht die Implementierung selbst, sondern wo die
start()
-Methode des Threads aufgerufen wird)
Sobald Sie sicher sind, dass alles funktioniert, führen Sie die Verifikationstests auf dem Pfad /src/test/java/TaskLockExampleTest.java
aus.
Danke für Ihr Feedback!