Class SignalingQueue<E>

java.lang.Object
de.bsvrz.ars.ars.persistence.util.SignalingQueue<E>
Type Parameters:
E -

public class SignalingQueue<E> extends Object
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
    Constructor
    Description
    Erstellt eine neue SignalingQueue.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    add(E element)
    Fügt ein Element zur Queue hinzu.
    long
    Gibt eine Abschätzung der Arraygröße der intern verwendeten Queue zurück
    void
    Löscht alle Elemente
    boolean
    Gibt zurück, ob die Queue leer ist.
    int
    Gibt die Anzahl der Elemente zurück.
    long
    sumElements(ToLongFunction<? super E> extractor)
    Berechnet eine Summe über alle Elemente, z.
    Holt ein Element aus der Queue und wartet dafür, falls nötig, solange, bis ein Element mit add(Object) hinzugefügt wurde, oder bis die Queue mit terminate() terminiert wurde.
    take(Duration timeout)
    Holt ein Element aus der Queue und wartet ggf. solange bis eines mit add(Object) hinzugefügt wurde, oder bis die Queue mit terminate() 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 eine TerminatedException geworfen.
    void
    Löscht alle Elemente und signalisiert, dass die Queue terminiert wurde, d. h. der nächste take()-Aufruf wirft eine TerminatedException.
    boolean
    Wartet, bis die Queue leer ist

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • SignalingQueue

      public SignalingQueue()
      Erstellt eine neue SignalingQueue.
  • Method Details

    • add

      public void add(@NotNull E element)
      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 mit add(Object) hinzugefügt wurde, oder bis die Queue mit terminate() terminiert wurde.
      Returns:
      Element
      Throws:
      InterruptedException - Beim Warten auf Elemente unterbrochen
      TerminatedException - Es gibt kein Element mehr und die Queue wurde terminiert, d. h. das letzte Element wurde bereits im vorherigen Schritt geholt
    • take

      public E take(Duration timeout) throws InterruptedException, TerminatedException
      Holt ein Element aus der Queue und wartet ggf. solange bis eines mit add(Object) hinzugefügt wurde, oder bis die Queue mit terminate() 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 unterbrochen
      TerminatedException - Es gibt kein Element mehr und die Queue wurde terminiert, d. h. das letzte Element wurde bereits im vorherigen Schritt geholt
    • waitUntilEmpty

      public boolean waitUntilEmpty(Duration timeout) throws InterruptedException
      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 eine TerminatedException.
    • 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 eine TerminatedException geworfen.
    • sumElements

      public long sumElements(ToLongFunction<? super E> extractor)
      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