Package at.letto.queue
Class TaskQueue<T,K>
java.lang.Object
at.letto.queue.TaskQueue<T,K>
- Type Parameters:
T- Task-TypK- Schlüsseltyp zur Duplikatserkennung (muss equals/hashCode korrekt implementieren)
- All Implemented Interfaces:
AutoCloseable
Generische, threadsichere Task-Queue mit:
- insertTop(item): Einfügen am Kopf → als nächstes verarbeitet
- insertEnd(item): Einfügen am Ende → FIFO
- insAtTime(item,m): geplanter Start frühestens in m Minuten
Verzögerte Items (insAtTime) werden in eine DelayQueue gelegt und bei Fälligkeit
in die Ready-Deque verschoben. Duplikate (gleicher Schlüssel) in der DelayQueue
werden beim Einfügen entfernt und aktualisiert (Replanen).
Siehe auch main am Ende für Beispielnutzung.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classprivate static final classWrapper für DelayQueue – vergleicht nach Fälligkeit; Gleichheit über Schlüssel.private static classstatic interfaceOptionaler Fehler-Callback.static interfaceVerarbeitet ein Item. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final DelayQueue<TaskQueue.DelayedItem<T, K>> Verzögerte Items.private final TaskQueue.ErrorHandler<T> private final Durationprivate final TaskQueue.TaskProcessor<T> private final BlockingDeque<T> Sofort verarbeitbare Items.private final Durationprivate final ExecutorServiceprivate final ScheduledExecutorServiceprivate final ExecutorServiceprivate final AtomicBooleanGenau ein Worker gleichzeitig. -
Constructor Summary
ConstructorsConstructorDescriptionTaskQueue(TaskQueue.TaskProcessor<T> processor, Function<T, K> keyExtractor, Duration idleStop, Duration restartPeriod, TaskQueue.ErrorHandler<T> errorHandler) Erzeugt eine generische Task-Queue. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Ordnungsgemäßes Beenden.intAnzahl geplanter (noch nicht fälliger) Items.private voidStartet Worker, wenn Arbeit anliegt und keiner läuft.voidEinfügen mit frühestem Ausführungszeitpunkt (jetzt + minutes).voidEinfügen am Ende (FIFO).voidEinfügen am Kopf → wird als nächstes verarbeitet.static voidintAnzahl sofort verarbeitbarer Items.private voidprivate voidAbarbeitung der Ready-Deque mit Idle-Abbruch.
-
Field Details
-
processor
-
errorHandler
-
keyExtractor
-
idleStop
-
restartPeriod
-
readyDeque
Sofort verarbeitbare Items. -
delayedQueue
Verzögerte Items. -
workerRunning
Genau ein Worker gleichzeitig. -
workerPool
-
scheduler
-
watchdog
-
-
Constructor Details
-
TaskQueue
public TaskQueue(TaskQueue.TaskProcessor<T> processor, Function<T, K> keyExtractor, Duration idleStop, Duration restartPeriod, TaskQueue.ErrorHandler<T> errorHandler) Erzeugt eine generische Task-Queue.- Parameters:
processor- Callback zur Verarbeitung eines ItemskeyExtractor- extrahiert den eindeutigen Schlüssel aus einem Item (für Delay-Deduplikation)idleStop- Leerlaufdauer bis der Worker stoppt (z. B. 2s)restartPeriod- Prüfintervall, ob neu gestartet werden soll (z. B. 5min)errorHandler- optionaler Fehler-Callback (kann null sein)
-
-
Method Details
-
insertTop
Einfügen am Kopf → wird als nächstes verarbeitet. -
insertEnd
Einfügen am Ende (FIFO). -
insAtTime
Einfügen mit frühestem Ausführungszeitpunkt (jetzt + minutes). Existiert bereits ein verzögertes Item mit gleichem Schlüssel, wird es entfernt und durch das neue (mit aktualisierter Fälligkeit) ersetzt. -
readySize
public int readySize()Anzahl sofort verarbeitbarer Items. -
delayedSize
public int delayedSize()Anzahl geplanter (noch nicht fälliger) Items. -
close
public void close()Ordnungsgemäßes Beenden.- Specified by:
closein interfaceAutoCloseable
-
runScheduler
private void runScheduler() -
ensureWorkerIfNeeded
private void ensureWorkerIfNeeded()Startet Worker, wenn Arbeit anliegt und keiner läuft. -
runWorker
private void runWorker()Abarbeitung der Ready-Deque mit Idle-Abbruch. -
main
- Throws:
Exception
-