Kursinhalt
Multithreading in Java
Multithreading in Java
2. Synchronisierte Sammlungen
3. Hochrangige Synchronisationsmechanismen
Herausforderung Semaphore
Aufgabe
Stellen Sie sich vor, Sie haben eine Ressource, auf die nur zwei Threads gleichzeitig zugreifen können. Ihre Aufgabe ist es, ein Programm zu erstellen, das ein semaphore
verwendet, um den Zugriff auf diese Ressource zu kontrollieren.
Bedingungen:
- Sie haben eine
Resource
Klasse mit eineruse()
Methode, die die Nutzung einer Ressource simuliert, wie z.B. das Drucken einer Nachricht und das Einführen einer Verzögerung; - Sie haben eine
Worker
Klasse, dieRunnable
implementiert; in ihrerrun()
Methode wird sie versuchen, mit einemsemaphore
auf die Ressource zuzugreifen; - In der
SemaphoreExample
Klasse haben Sie einemain()
Methode, die einsemaphore
mit Berechtigungen für zwei Threads initialisiert, zusammen mit mehreren Worker-Threads, die versuchen werden, auf die Ressource zuzugreifen; - Stellen Sie sicher, dass nicht mehr als zwei Threads die Ressource zu einem beliebigen Zeitpunkt nutzen können.
Wie sollte das Programm funktionieren?
Sie haben 5 Threads, die die use()
Methode gleichzeitig ausführen möchten, aber mit einem Semaphore
müssen Sie die gleichzeitige Ausführung auf 2 Threads begrenzen. Sobald ein Thread das Semaphore
freigibt, kann ein anderer Thread beginnen, diese Methode auszuführen. Zur besseren Klarheit in diesem Szenario wird empfohlen, eine Verzögerung innerhalb der use()
Methode einzuführen.
War alles klar?
Danke für Ihr Feedback!
Abschnitt 3. Kapitel 4