Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung: Lock und Condition | Hochrangige Synchronisationsmechanismen
Multithreading in Java

bookHerausforderung: 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() und greenLight();
  • Verwendung von Lock und Condition: Verwenden Sie Lock, um den Zugriff auf gemeinsame Ressourcen zu steuern, und Condition, um die Threads zu koordinieren.
Note
Hinweis

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.

Note
Hinweis

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.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 2

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 3.33

bookHerausforderung: 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() und greenLight();
  • Verwendung von Lock und Condition: Verwenden Sie Lock, um den Zugriff auf gemeinsame Ressourcen zu steuern, und Condition, um die Threads zu koordinieren.
Note
Hinweis

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.

Note
Hinweis

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.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 2
some-alt