Class SignalingQueue<E>
java.lang.Object
de.bsvrz.ars.ars.persistence.util.SignalingQueue<E>
- Type Parameters:
E
-
Eine Klasse ähnlich einer
BlockingQueue
ohne Kapazitätsgrenze,
die es ermöglicht, darauf zu warten, dass die Queue leer wird.
Außerdem ermöglicht die Queue mit terminate()
bzw. terminateNow()
das Terminieren
dieser Queue. Alle Daten, die nach dem
Terminierungsignal eingefügt werden, werden ignoriert und der Versuch, weitere Daten mit take()
abzuholen, führt dann zu einer TerminatedException
. Dies entspricht dem Einfügen eines speziellen Objekts
in die Queue, allerdings ist es nicht möglich, eine Queue mehrfach zu terminieren.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
Fügt ein Element zur Queue hinzu.long
Gibt eine Abschätzung der Arraygröße der intern verwendeten Queue zurückvoid
clear()
Löscht alle Elementeboolean
isEmpty()
Gibt zurück, ob die Queue leer ist.int
size()
Gibt die Anzahl der Elemente zurück.long
sumElements
(ToLongFunction<? super E> extractor) Berechnet eine Summe über alle Elemente, z.take()
Holt ein Element aus der Queue und wartet dafür, falls nötig, solange, bis ein Element mitadd(Object)
hinzugefügt wurde, oder bis die Queue mitterminate()
terminiert wurde.Holt ein Element aus der Queue und wartet ggf. solange bis eines mitadd(Object)
hinzugefügt wurde, oder bis die Queue mitterminate()
terminiert wurde oder bis der angegebene Timeout abgelaufen ist.void
Signalisiert, dass die Queue terminiert wurde, d. h. das Einfügen von weiteren Elementen ist nicht mehr möglich und nach dem Holen des letzten Elements wird bei weiteren Aufrufen von take()-Aufruf eineTerminatedException
geworfen.void
Löscht alle Elemente und signalisiert, dass die Queue terminiert wurde, d. h. der nächste take()-Aufruf wirft eineTerminatedException
.boolean
waitUntilEmpty
(Duration timeout) Wartet, bis die Queue leer ist
-
Constructor Details
-
SignalingQueue
public SignalingQueue()Erstellt eine neue SignalingQueue.
-
-
Method Details
-
add
Fügt ein Element zur Queue hinzu. Da die Größe der Queue unbegrenzt ist, ist dies immer erfolgreich, außer die Queue wurde bereits terminiert, in dem Fall wird das Element ignoriert.- Parameters:
element
- Element
-
take
Holt ein Element aus der Queue und wartet dafür, falls nötig, solange, bis ein Element mitadd(Object)
hinzugefügt wurde, oder bis die Queue mitterminate()
terminiert wurde.- Returns:
- Element
- Throws:
InterruptedException
- Beim Warten auf Elemente unterbrochenTerminatedException
- Es gibt kein Element mehr und die Queue wurde terminiert, d. h. das letzte Element wurde bereits im vorherigen Schritt geholt
-
take
Holt ein Element aus der Queue und wartet ggf. solange bis eines mitadd(Object)
hinzugefügt wurde, oder bis die Queue mitterminate()
terminiert wurde oder bis der angegebene Timeout abgelaufen ist.- Parameters:
timeout
- Timeout- Returns:
- Element oder null (nur bei Timeout-Ablauf)
- Throws:
InterruptedException
- Beim Warten auf Elemente unterbrochenTerminatedException
- Es gibt kein Element mehr und die Queue wurde terminiert, d. h. das letzte Element wurde bereits im vorherigen Schritt geholt
-
waitUntilEmpty
Wartet, bis die Queue leer ist- Parameters:
timeout
- Timeout- Returns:
- true: Queue hat sich innerhalb des timeouts geleert, false: timout ist abgelaufen, bevor Queue leer ist
- Throws:
InterruptedException
- Unterbrochen beim Warten
-
size
public int size()Gibt die Anzahl der Elemente zurück. Das Signal zur Terminierung wird nicht mitgezählt.- Returns:
- die Anzahl der Elemente
-
isEmpty
public boolean isEmpty()Gibt zurück, ob die Queue leer ist. Das Signal zur Terminierung wird nicht mitgezählt.- Returns:
- die Anzahl der Elemente
-
clear
public void clear()Löscht alle Elemente -
terminateNow
public void terminateNow()Löscht alle Elemente und signalisiert, dass die Queue terminiert wurde, d. h. der nächste take()-Aufruf wirft eineTerminatedException
. -
terminate
public void terminate()Signalisiert, dass die Queue terminiert wurde, d. h. das Einfügen von weiteren Elementen ist nicht mehr möglich und nach dem Holen des letzten Elements wird bei weiteren Aufrufen von take()-Aufruf eineTerminatedException
geworfen. -
sumElements
Berechnet eine Summe über alle Elemente, z. B. zur Abschätzung des Gesamt-Speicherverbrauchs- Parameters:
extractor
- Extraktionsfunktion, die jedes Element in eine Zahl umwandelt, welche dann aufaddiert wird- Returns:
- Summe über alle Elemente
-
capacityEstimate
public long capacityEstimate()Gibt eine Abschätzung der Arraygröße der intern verwendeten Queue zurück- Returns:
- Geschätzte Gesamtanzahl der Elemente im Array
-