Package de.bsvrz.ars.ars.mgmt.tasks
Class QueueTask<T>
java.lang.Object
de.bsvrz.ars.ars.mgmt.tasks.Task
de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
de.bsvrz.ars.ars.mgmt.tasks.QueueTask<T>
- Direct Known Subclasses:
ArchivConfig
,DeletePermanentlyTask
,MultiTask
,MultiTaskManager
,SerializeTask
,SingleTask
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.
-
Field Summary
Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
_debug, _shouldTerminate
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
QueueTask
(ArchiveManager archiveMgr, SignalingQueue<T> queue) -
Method Summary
Modifier and TypeMethodDescriptionfinal void
step()
Implementiert die beliebige wiederholt auszuführende Aufgabevoid
Fügt einen abzuarbeitenden Auftrag in die Queue ein.void
Terminiert den Task.protected abstract void
Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet.Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
execute, getArchMgr
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
addTaskStepListener, cleanUp, getName, getState, isAlive, isTerminated, join, removeTaskStepListener, setName, start, taskStepDone
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
getDidTree, getPersistenceManager, shouldTerminate, suspendTaskIfNecessary
-
Constructor Details
-
QueueTask
-
-
Method Details
-
submit
Fügt einen abzuarbeitenden Auftrag in die Queue ein.- Parameters:
step
- Datensatz
-
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 derstep()
-Methode aufgeweckt wird, falls die Methode dort gerade auf einen neuen Auftrag warten.- Overrides:
terminateTask
in classTask
-
step
Description copied from class:RepeatingTask
Implementiert die beliebige wiederholt auszuführende Aufgabe- Specified by:
step
in classRepeatingTask
- Throws:
InterruptedException
- Thread unterbrochen
-
work
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- Parameters:
step
- Auftrag/Arbeitsschritt- Throws:
InterruptedException
- Thread unterbrochen
-