Class TelegramQueue<Telegram extends QueueableTelegram>


  • public class TelegramQueue<Telegram extends QueueableTelegram>
    extends java.lang.Object
    Klasse, die zum gepufferten Austausch von Telegrammen zwischen verschiedenen Threads verwendet werden kann. Die Gesamtgröße der gepufferten Telegramme ist beschränkt. Es werden verschiedene Telegrammprioritäten unterstützt.

    Telegramme können mit der Methode put(Telegram) gespeichert werden und mit der Methode take() wieder ausgelesen werden. Die Methoden blockieren, wenn beim Speichern nicht genügend Platz vorhanden ist, bzw., wenn beim Auslesen kein Telegramm mehr zur Verfügung steht. Der Methode close() dient zum Schließen der Queue. blockiert keine der beiden Methoden mehr.

    • Constructor Summary

      Constructors 
      Constructor Description
      TelegramQueue​(int capacity, int maximumPriority)
      Erzeugt eine neue Queue mit den angegebenen Eigenschaften.
    • Method Summary

      Modifier and Type Method Description
      void abort()
      Diese Methode schließt die Verbindung und löscht alle noch gespeicherten Telegramme.
      void close()
      Diese Methode schließt die Verbindung.
      int getCapacity()
      Bestimmt die maximale Gesamtgröße für zwischengespeicherte Telegramme.
      int getSize()
      Bestimmt die Gesamtgröße der aktuell zwischengespeicherten Telegramme.
      void put​(Telegram telegram)
      Speichert das angegebene Telegramm in der Queue.
      Telegram take()
      Gibt das älteste in der Queue gespeicherte Telegramm mit der höchsten Priorität zurück.
      int takeMultiple​(int sizeLimit, java.util.Collection<Telegram> result)
      Gibt die ältesten in der Queue gespeicherten Telegramme zurück, so lange bis die summierte Telegrammlänge das angegebene Limit überschreitet oder die Queue leer ist.
      • Methods inherited from class java.lang.Object

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

      • TelegramQueue

        public TelegramQueue​(int capacity,
                             int maximumPriority)
        Erzeugt eine neue Queue mit den angegebenen Eigenschaften.
        Parameters:
        capacity - Maximale Gesamtgröße der gepufferten Telegramme.
        maximumPriority - Maximale von Telegrammen verwendete Priorität.
    • Method Detail

      • take

        public Telegram take()
                      throws java.lang.InterruptedException
        Gibt das älteste in der Queue gespeicherte Telegramm mit der höchsten Priorität zurück. Wenn die Queue noch nicht geschlossen wurde, wartet diese Methode, bis ein Telegramm in der Queue zur Verfügung steht.
        Returns:
        Nächstes gespeicherte Telegramm mit der höchsten Priorität. Wenn die Queue geschlossen wurde und kein gespeichertes Telegramm mehr verfügbar ist wird null zurückgegeben.
        Throws:
        java.lang.InterruptedException - Wenn der Thread während des Wartens unterbrochen wurde.
      • takeMultiple

        public int takeMultiple​(int sizeLimit,
                                java.util.Collection<Telegram> result)
                         throws java.lang.InterruptedException
        Gibt die ältesten in der Queue gespeicherten Telegramme zurück, so lange bis die summierte Telegrammlänge das angegebene Limit überschreitet oder die Queue leer ist. Das erste Telegramm, was dafür sorgt, dass das Limit überschritten wird, wird mit zurückgegeben. Das bedeutet, dass auch bei einem Limit von 0 immer (genau) ein Telegramm zurückgegeben wird.
        Parameters:
        sizeLimit - Anzahl Bytes, die diese Methode versucht mindestens zurückzugeben (solange in der Queue genug Daten da sind)
        result - Liste in der die Telegramme zurückgegeben werden. Wird übergeben, damit nicht ständig eine neue Liste erstellt werden muss. Die Liste wird beim Aufruf der Methode geleert.
        Returns:
        Anzahl Bytes der zurückgegebenen Telegramme oder -1 wenn die Queue geschlossen wurde
        Throws:
        java.lang.InterruptedException
      • put

        public void put​(Telegram telegram)
                 throws java.lang.InterruptedException
        Speichert das angegebene Telegramm in der Queue. Bei Bedarf wartet diese Methode bis genügend Platz in der Queue für das zu speichernde Telegramm zur Verfügung steht.
        Parameters:
        telegram - Das zu speichernde Telegramm
        Throws:
        java.lang.InterruptedException - Wenn der Thread während des Wartens unterbrochen wurde.
      • getCapacity

        public int getCapacity()
        Bestimmt die maximale Gesamtgröße für zwischengespeicherte Telegramme.
        Returns:
        Maximale Gesamtgröße für zwischengespeicherte Telegramme.
      • getSize

        public int getSize()
        Bestimmt die Gesamtgröße der aktuell zwischengespeicherten Telegramme.
        Returns:
        Gesamtgröße der aktuell zwischengespeicherten Telegramme.
      • close

        public void close()
        Diese Methode schließt die Verbindung. Danach ignoriert die Methode put(Telegram) sämtliche weitere zu speichernde Telegramme und die Methode take() liefert noch alle bisher gespeicherten Telegramme und danach null zurück. Eventuell blockierte Threads werden geweckt.
      • abort

        public void abort()
        Diese Methode schließt die Verbindung und löscht alle noch gespeicherten Telegramme. Danach ignoriert die Methode put(Telegram) sämtliche weitere zu speichernde Telegramme und die Methode take() liefert anschließend immer null zurück. Eventuell blockierte Threads werden geweckt.