de.bsvrz.ars.ars.mgmt.tasks
Class MultiTaskManager
java.lang.Object
java.lang.Thread
de.bsvrz.ars.ars.mgmt.tasks.Task
de.bsvrz.ars.ars.mgmt.tasks.MultiTaskManager
- All Implemented Interfaces:
- SuspendableTask, RingOfDeathListener, Runnable
public class MultiTaskManager
- extends Task
- implements RingOfDeathListener
Verwaltet eine Warteschlange und eine Liste von Tasks. Ein Auftrag aus der Warteschlage wird dem naechsten freien Task zugewiesen. Wenn kein Task frei ist,
wartet der MultiTaskManager.
- Author:
- beck et al. projects GmbH, Alexander Schmidt
Method Summary |
void |
addTask(MultiTask task)
Fuegt ein MultiTask hinzu und startet ihn, falls der MultitaskManager selbst schon gestartet ist. |
int |
getTaskNum()
|
void |
pushFreeTask(MultiTask task)
Diese Methode wird von einem Task aufgerufen, wenn dieser Task mit der Bearbeitung eines Auftrages fertig ist und einen neuen Auftrag entgegennehmen kann. |
void |
removeTask()
Entfernt einen Subtask aus der Liste der verfuegbaren Tasks. |
void |
ringOfDeath(Task doomedTask)
Wird von einem Task vor dem Verlassen der Hauptschleife aufgerufen, wenn dem Task dieses Interface im Konstruktor uebergeben wurde.. |
void |
run()
|
void |
start()
|
String |
toString()
|
private void |
waitForSubtaskTermination()
|
Methods inherited from class java.lang.Thread |
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, stop, stop, suspend, yield |
inputDataQueue
protected RingBuffer<ResultData> inputDataQueue
freeTaskQueue
protected RingBuffer<MultiTask> freeTaskQueue
taskList
protected ArrayList<MultiTask> taskList
adjustTaskNumFactor
private AtomicInteger adjustTaskNumFactor
- So viele Tasks sind beim naechsten Durchlauf zu entfernen
terminationSemaphor
private Semaphore terminationSemaphor
MultiTaskManager
public MultiTaskManager(ArchiveManager archiveMgr,
RingOfDeathListener rodl,
RingBuffer<ResultData> inputData,
String taskName)
start
public void start()
- Overrides:
start
in class Thread
addTask
public void addTask(MultiTask task)
- Fuegt ein MultiTask hinzu und startet ihn, falls der MultitaskManager selbst schon gestartet ist.
- Parameters:
task
-
- Throws:
ConfigurationException
removeTask
public void removeTask()
- Entfernt einen Subtask aus der Liste der verfuegbaren Tasks. Es verbleibt immer mindestens ein Task.
getTaskNum
public int getTaskNum()
pushFreeTask
public void pushFreeTask(MultiTask task)
- Diese Methode wird von einem Task aufgerufen, wenn dieser Task mit der Bearbeitung eines Auftrages fertig ist und einen neuen Auftrag entgegennehmen kann.
- Parameters:
task
-
run
public void run()
- Specified by:
run
in interface Runnable
- Overrides:
run
in class Thread
waitForSubtaskTermination
private void waitForSubtaskTermination()
ringOfDeath
public void ringOfDeath(Task doomedTask)
- Description copied from interface:
RingOfDeathListener
- Wird von einem Task vor dem Verlassen der Hauptschleife aufgerufen, wenn dem Task dieses Interface im Konstruktor uebergeben wurde..
- Specified by:
ringOfDeath
in interface RingOfDeathListener
- Parameters:
doomedTask
- Task, der gerade beendet wird
toString
public String toString()
- Overrides:
toString
in class Thread