Queue + Deque - Aufgaben
Aufgabe 1 (Optional)
Wir implementieren eine einfache Job-Verarbeitung.
Zwei InputWorker erstellen neue Job’s, welche parallel von einem OutputWorker abgearbeitet werden.
Jeder InputWorker erstellt eine definierte Anzahl Jobs und stoppt anschliessend. Die Anzahl könnt ihr in der Start-Klasse anpassen: Start.INPUTWORKER_NUMBER_OF_JOBS.
Nach jedem Arbeitsschritt (Job erstellen oder verarbeiten) machen die Workers eine kleine Pause.
Ihr könnt die maximale zufällige Dauer über die statischen Variablen Start.INPUTWORKER_MAX_RELAX_TIME_MS und Start.OUTPUTWORKER_MAX_RELAX_TIME_MS steuern.
Auch die maximal zufällige Dauer zum Abarbeiten eines Jobs kann definiert werden: Start.OUTPUTWORKER_MAX_PROCESS_TIME_MS.
Der OutputWorker stoppt, sobald er während einer Anzahl Durchgänge (Start.OUTPUTWORKER_STOP_AFTER_EMPTY_CYCLES) keine Jobs zum Verarbeiten erhält.
Die Worker sind mit dem ProcessingInterface entkoppelt, welches das Hinzufügen und Abholen der Jobs zur Verfügung stellt:
Inferface ProcessingInterface
| |
In der Konsole seht ihr die Arbeit der Workers:
Mögliche Konsole-Ausgabe
| |
Mit der Start-Klasse wird das gesamte System gestartet.
Leider fehlt ein zentraler Teil des Systems:
Ihr müsst das Interface ProcessingInterface implementieren.
Ihr findet den Programmcode im work Repo:
https://github.com/it-ninjas/work/tree/main/labs/src/main/java/ch/itninjas/labs/j7/queue/lab1
Aufgabe 1.1 (Optional)
- Implementiert das
ProcessingInterfacemit einer Queue, damit die Jobs im FIFO-Prinzip (First-In-First-Out) verarbeitet werden. - Kontrolliert die Konsole-Ausgabe:
- Ob alle Jobs verarbeitet wurden.
- Ob die Jobs in der gewünschten Reihenfolge verarbeitet wurden.
- Verändert die Pausen und Verarbeitungszeit der Worker und schaut euch der Einfluss in der Konsole an.
Aufgabe 1.2 (Optional)
- Implementiert das
ProcessingInterfacemit einer Queue, damit die Jobs im LIFO-Prinzip (Last-In-First-Out) verarbeitet werden. - Kontrolliert die Konsole-Ausgabe:
- Ob alle Jobs verarbeitet wurden.
- Ob die Jobs in der gewünschten Reihenfolge (Last-In-First-Out) verarbeitet wurden.
- Verändert die Pausen und Verarbeitungszeit der Worker und schaut euch der Einfluss in der Konsole an.
Aufgabe 2 (Optional)
Erweitert den OutputWorker so, dass er vor der Verarbeitung eines Jobs die Anzahl offener Jobs anzeigt.
Aufgabe 3 (Optional)
Erweitert den OutputWorker so, dass er zufällig einzelne Jobs nicht erfolgreich bearbeiten kann und diese mit der Methode ProcessingInterface.getJobBack(Job job) zurück in die Queue stellt.
Aufgabe 4 (Optional)
Erstellt ein JUnit-Test (JUnit Version 5), welcher die Schnittstelle ProcessingInterface der Klasse Processing ausführlich testet.