Class QueueTask<T>

Direct Known Subclasses:
ArchivConfig, MultiTask, MultiTaskManager, SingleTask

public abstract class QueueTask<T>
extends RepeatingTask
Abstrakte Basisklasse für die abstrakten Task-Basisklassen SingleTask und MultiTask.

Ein QueueTask ist ein Thread, der laufend eine bestimmte Aktion ausführt. Er ähnelt einem Executors.newSingleThreadExecutor(), die einzelnen Aufgaben werden aber nicht als Runnable o.ä. übergeben, sondern der Task holt sich selbst die durchzuführenden Arbeitsschritte aus einer Queue. Die Klasse, auf der ein Task arbeitet wird über den generischen Typ T definiert.

  • Constructor Details

    • QueueTask

      protected QueueTask​(ArchiveManager archiveMgr, java.util.concurrent.BlockingQueue<java.lang.Object> queue)
  • Method Details

    • submit

      public void submit​(@NotNull T step) throws java.lang.InterruptedException
      Fügt einen abzuarbeitenden Auftrag in die Queue ein.
      Parameters:
      step - Datensatz
      Throws:
      java.lang.InterruptedException - Thread unterbrochen
    • offer

      public boolean offer​(@NotNull T step) throws java.lang.InterruptedException
      Fügt einen abzuarbeitenden Auftrag in die Queue ein, wenn das möglich ist.
      Parameters:
      step - Datensatz
      Returns:
      true wenn eingefügt wurde, sonst false
      Throws:
      java.lang.InterruptedException - Thread unterbrochen
    • terminateTask

      public void terminateTask()
      Terminiert den Task. Diese Methode fügt zusätzlich in die Queue einen speziellen Token ein, mit dem der Aufruf von _queue.take() in der step()-Methode aufgeweckt wird, falls die Methode dort gerade auf einen neuen Auftrag warten.
      Overrides:
      terminateTask in class AbstractTask
    • step

      public final void step() throws java.lang.InterruptedException
      Description copied from class: RepeatingTask
      Implementiert die beliebige wiederholt auszuführende Aufgabe
      Specified by:
      step in class RepeatingTask
      Throws:
      java.lang.InterruptedException - Thread unterbrochen
    • work

      protected abstract void work​(T step) throws java.lang.InterruptedException
      Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet
      Parameters:
      step - Auftrag/Arbeitsschritt
      Throws:
      java.lang.InterruptedException - Thread unterbrochen