Package de.bsvrz.ars.ars.mgmt.tasks
Class MultiTaskManager
java.lang.Object
de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
de.bsvrz.ars.ars.mgmt.tasks.Task
de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
de.bsvrz.ars.ars.mgmt.tasks.QueueTask<de.bsvrz.dav.daf.main.ResultData>
de.bsvrz.ars.ars.mgmt.tasks.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.
-
Field Summary
Fields Modifier and Type Field Description protected de.bsvrz.sys.funclib.losb.ringbuffer.RingBuffer<MultiTask>
freeTaskQueue
Warteschlange mit Sub-Tasks, die aktuell nichts tun.protected java.util.ArrayList<MultiTask>
taskList
Liste mit allen Sub-TasksFields inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
TERMINATE_TASK
Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
_debug, _shouldTerminate, archMgr, didTree, persMgr
-
Constructor Summary
Constructors Constructor Description MultiTaskManager(ArchiveManager archiveMgr, java.util.concurrent.BlockingQueue<java.lang.Object> inputData, java.lang.String taskName)
Erstellt einen neuen MultiTaskManager -
Method Summary
Modifier and Type Method Description void
addTask(MultiTask task)
Fuegt ein MultiTask hinzu und startet ihn, falls der MultitaskManager selbst schon gestartet ist.protected void
cleanUp()
Wird garantiert aufgerufen, nachdem der Task vollständig terminiert wurde.void
getObjectsFromDav()
Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist.int
getTaskNum()
Gibt die Anzahl der aktuell verwalteten Sub-Tasks zurückboolean
isAlive()
Gibttrue
zurück, wenn der Task aktuell läuftvoid
join()
Wartet auf das Beenden des Tasks nach der Terminierung.void
removeTask()
Entfernt einen Subtask aus der Liste der verfuegbaren Tasks.void
start()
Startet den Thread, der den Task ausführtjava.lang.String
toString()
protected void
work(de.bsvrz.dav.daf.main.ResultData step)
Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitetMethods inherited from class de.bsvrz.ars.ars.mgmt.tasks.QueueTask
offer, step, submit, terminateTask
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
execute
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
addTaskStepListener, getName, getState, isTerminated, removeTaskStepListener, setName, taskStepDone
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
getArchMgr, shouldTerminate, suspendTaskIfNecessary
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Field Details
-
freeTaskQueue
Warteschlange mit Sub-Tasks, die aktuell nichts tun. -
taskList
Liste mit allen Sub-Tasks
-
-
Constructor Details
-
MultiTaskManager
public MultiTaskManager(ArchiveManager archiveMgr, java.util.concurrent.BlockingQueue<java.lang.Object> inputData, java.lang.String taskName)Erstellt einen neuen MultiTaskManager- Parameters:
archiveMgr
- Archiv-ManagerinputData
- Queue, in die von einem anderne THread zu verarbeitende Daten eingefügt werdentaskName
- Name
-
-
Method Details
-
start
public void start()Description copied from class:Task
Startet den Thread, der den Task ausführt -
addTask
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:Task
Wird garantiert aufgerufen, nachdem der Task vollständig terminiert wurde. Dieser Code wird im selben Thread ausgeführt, wie der eigentliche TaskTut standardmäßig nichts, kann überschrieben werden um Daten aufzuräumen, Abmeldungen durchzuführen usw.
-
work
protected void work(de.bsvrz.dav.daf.main.ResultData step) throws java.lang.InterruptedExceptionDescription copied from class:QueueTask
Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet -
join
public void join() throws java.lang.InterruptedExceptionDescription copied from class:Task
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
-
toString
public java.lang.String toString()- Overrides:
toString
in classjava.lang.Object
-
isAlive
public boolean isAlive()Description copied from class:Task
Gibttrue
zurück, wenn der Task aktuell läuft -
getObjectsFromDav
public void getObjectsFromDav()Description copied from class:AbstractTask
Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist. Kann benutzt werden, um Objekte zu laden und Anmeldungen durchzuführen.Wichtig: Diese Methode wird unter Umständen im Konstruktor ausgeführt und sollte daher nicht erwarten, dass die Subklasse (`this`) vollständig initialisiert ist.
- Overrides:
getObjectsFromDav
in classAbstractTask
-