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
ConstructorsModifierConstructorDescriptionprotectedQueueTask(ArchiveManager archiveMgr, SignalingQueue<T> queue) -
Method Summary
Modifier and TypeMethodDescriptionfinal voidstep()Implementiert die beliebige wiederholt auszuführende AufgabevoidFügt einen abzuarbeitenden Auftrag in die Queue ein.voidTerminiert den Task.protected abstract voidVom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet.Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
execute, getArchMgrMethods inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
addTaskStepListener, cleanUp, getName, getState, isAlive, isTerminated, join, removeTaskStepListener, setName, start, taskStepDoneMethods 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:
terminateTaskin classTask
-
step
Description copied from class:RepeatingTaskImplementiert die beliebige wiederholt auszuführende Aufgabe- Specified by:
stepin 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
-