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
ProcessingInterface
mit 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
ProcessingInterface
mit 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.