Package de.bsvrz.ars.ars.mgmt.tasks
Class QueueTask<T>
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<T>
- Direct Known Subclasses:
ArchivConfig
,MultiTask
,MultiTaskManager
,SingleTask
public abstract class QueueTask<T> extends RepeatingTask
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.RepeatingTask
TERMINATE_TASK
Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
_debug, _shouldTerminate, archMgr, didTree, persMgr
-
Constructor Summary
Constructors Modifier Constructor Description protected
QueueTask(ArchiveManager archiveMgr, java.util.concurrent.BlockingQueue<java.lang.Object> queue)
-
Method Summary
Modifier and Type Method Description boolean
offer(T step)
Fügt einen abzuarbeitenden Auftrag in die Queue ein, wenn das möglich ist.void
step()
Implementiert die beliebige wiederholt auszuführende Aufgabevoid
submit(T step)
Fügt einen abzuarbeitenden Auftrag in die Queue ein.void
terminateTask()
Terminiert den Task.protected abstract void
work(T step)
Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitetMethods inherited from class de.bsvrz.ars.ars.mgmt.tasks.RepeatingTask
execute
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
addTaskStepListener, cleanUp, getName, getState, isAlive, isTerminated, join, removeTaskStepListener, setName, start, taskStepDone
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.AbstractTask
getArchMgr, getObjectsFromDav, shouldTerminate, suspendTaskIfNecessary
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Constructor Details
-
QueueTask
protected QueueTask(ArchiveManager archiveMgr, java.util.concurrent.BlockingQueue<java.lang.Object> queue)
-
-
Method Details
-
submit
Fügt einen abzuarbeitenden Auftrag in die Queue ein.- Parameters:
step
- Datensatz- Throws:
java.lang.InterruptedException
- Thread unterbrochen
-
offer
Fügt einen abzuarbeitenden Auftrag in die Queue ein, wenn das möglich ist.- Parameters:
step
- Datensatz- Returns:
- true wenn eingefügt wurde, sonst false
- Throws:
java.lang.InterruptedException
- Thread unterbrochen
-
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 classAbstractTask
-
step
public final void step() throws java.lang.InterruptedExceptionDescription copied from class:RepeatingTask
Implementiert die beliebige wiederholt auszuführende Aufgabe- Specified by:
step
in classRepeatingTask
- Throws:
java.lang.InterruptedException
- Thread unterbrochen
-
work
Vom konkreten Task zu implementierende Methode, die den Auftrag abarbeitet- Parameters:
step
- Auftrag/Arbeitsschritt- Throws:
java.lang.InterruptedException
- Thread unterbrochen
-