Class MultiTaskManager


public final class MultiTaskManager extends QueueTask<de.bsvrz.dav.daf.main.ResultData>
Verwaltet eine Warteschlange und eine Liste von Tasks. Ein Auftrag aus der Warteschlage wird dem nächsten freien Task zugewiesen. Wenn kein Task frei ist, wartet der MultiTaskManager.
  • Constructor Details

    • MultiTaskManager

      public MultiTaskManager(ArchiveManager archiveMgr, SignalingQueue<de.bsvrz.dav.daf.main.ResultData> inputData, String taskName)
      Erstellt einen neuen MultiTaskManager
      Parameters:
      archiveMgr - Archiv-Manager
      inputData - Queue, in die von einem anderne THread zu verarbeitende Daten eingefügt werden
      taskName - Name
  • Method Details

    • start

      public void start()
      Description copied from class: AbstractTask
      Startet den Thread, der den Task ausführt
      Overrides:
      start in class AbstractTask
      See Also:
    • addTask

      public void addTask(MultiTask task)
      Fuegt ein MultiTask hinzu und startet ihn, falls der MultitaskManager selbst schon gestartet ist.
      Parameters:
      task - Kind-Task
    • removeTask

      public void removeTask()
      Entfernt einen Subtask aus der Liste der verfuegbaren Tasks. Es verbleibt immer mindestens ein Task.
    • getTaskNum

      public int getTaskNum()
      Gibt die Anzahl der aktuell verwalteten Sub-Tasks zurück
      Returns:
      Anzahl
    • cleanUp

      protected void cleanUp()
      Description copied from class: AbstractTask
      Wird garantiert aufgerufen, nachdem der Task vollständig terminiert wurde. Dieser Code wird im selben Thread ausgeführt, wie der eigentliche Task

      Tut standardmäßig nichts, kann überschrieben werden um Daten aufzuräumen, Abmeldungen durchzuführen usw.

      Overrides:
      cleanUp in class AbstractTask
    • work

      protected void work(de.bsvrz.dav.daf.main.ResultData step) throws InterruptedException
      Description copied from class: QueueTask
      Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet. Diese Methode sollte nur Intern aufgerufen werden, ist für Testfälle aber public. Normalerweise sollten Aufträge aber Asynchron mit submit() übergeben werden
      Specified by:
      work in class QueueTask<de.bsvrz.dav.daf.main.ResultData>
      Parameters:
      step - Auftrag/Arbeitsschritt
      Throws:
      InterruptedException - Thread unterbrochen
    • join

      public void join() throws InterruptedException
      Description copied from class: AbstractTask
      Wartet auf das Beenden des Tasks nach der Terminierung. Beispielcode:
      
       task.terminateTask(); // Task soll bei der nächsten Möglichkeit terminieren (asynchroner Aufruf)
       task.join(); // Auf das terminieren synchron warten
       
      Overrides:
      join in class AbstractTask
      Throws:
      InterruptedException - bei Unterbrechung
      See Also:
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • isAlive

      public boolean isAlive()
      Description copied from class: AbstractTask
      Gibt true zurück, wenn der Task aktuell läuft
      Overrides:
      isAlive in class AbstractTask
      Returns:
      true, wenn der Task aktuell läuft, sonst false
    • getObjectsFromDav

      public void getObjectsFromDav()