Class TaskQueue<T,K>

java.lang.Object
at.letto.queue.TaskQueue<T,K>
Type Parameters:
T - Task-Typ
K - Schlüsseltyp zur Duplikatserkennung (muss equals/hashCode korrekt implementieren)
All Implemented Interfaces:
AutoCloseable

public class TaskQueue<T,K> extends Object implements 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.
  • Field Details

  • 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 Items
      keyExtractor - 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

      public void insertTop(T item)
      Einfügen am Kopf → wird als nächstes verarbeitet.
    • insertEnd

      public void insertEnd(T item)
      Einfügen am Ende (FIFO).
    • insAtTime

      public void insAtTime(T item, int minutes)
      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:
      close in interface AutoCloseable
    • 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

      public static void main(String[] args) throws Exception
      Throws:
      Exception