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>freeTaskQueueWarteschlange mit Sub-Tasks, die aktuell nichts tun.protected java.util.ArrayList<MultiTask>taskListListe mit allen Sub-TasksFields inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
TERMINATE_TASKFields 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 voidaddTask(MultiTask task)Fuegt ein MultiTask hinzu und startet ihn, falls der MultitaskManager selbst schon gestartet ist.protected voidcleanUp()Wird garantiert aufgerufen, nachdem der Task vollständig terminiert wurde.voidgetObjectsFromDav()Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist.intgetTaskNum()Gibt die Anzahl der aktuell verwalteten Sub-Tasks zurückbooleanisAlive()Gibttruezurück, wenn der Task aktuell läuftvoidjoin()Wartet auf das Beenden des Tasks nach der Terminierung.voidremoveTask()Entfernt einen Subtask aus der Liste der verfuegbaren Tasks.voidstart()Startet den Thread, der den Task ausführtjava.lang.StringtoString()protected voidwork(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, terminateTaskMethods inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
executeMethods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
addTaskStepListener, getName, getState, isTerminated, removeTaskStepListener, setName, taskStepDoneMethods inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
getArchMgr, shouldTerminate, suspendTaskIfNecessaryMethods 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:TaskStartet 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:TaskWird 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:QueueTaskVom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet -
join
public void join() throws java.lang.InterruptedExceptionDescription copied from class:TaskWartet 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:
toStringin classjava.lang.Object
-
isAlive
public boolean isAlive()Description copied from class:TaskGibttruezurück, wenn der Task aktuell läuft -
getObjectsFromDav
public void getObjectsFromDav()Description copied from class:AbstractTaskWird 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:
getObjectsFromDavin classAbstractTask
-