de.bsvrz.dav.daf.communication.lowLevel
Class TelegramQueue<Telegram extends QueueableTelegram>

java.lang.Object
  extended by de.bsvrz.dav.daf.communication.lowLevel.TelegramQueue<Telegram>

public class TelegramQueue<Telegram extends QueueableTelegram>
extends 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.

Author:
Kappich Systemberatung

Field Summary
private  int _capacity
          Maximale Gesamtgröße für zwischengespeicherte Telegramme.
private  boolean _closed
           
private  LinkedList<Telegram>[] _priorityLists
          Array, das je mögliche Priorität eine verkettete Liste mit den zwischengespeicherten Telegrammen enthält.
private  int _size
          Gesamtgröße der aktuell zwischengespeicherten Telegramme.
 
Constructor Summary
TelegramQueue(int capacity, int maximumPriority)
          Erzeugt eine neue Queue mit den angegebenen Eigenschaften.
 
Method Summary
 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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_capacity

private final int _capacity
Maximale Gesamtgröße für zwischengespeicherte Telegramme.


_size

private int _size
Gesamtgröße der aktuell zwischengespeicherten Telegramme.


_priorityLists

private final LinkedList<Telegram extends QueueableTelegram>[] _priorityLists
Array, das je mögliche Priorität eine verkettete Liste mit den zwischengespeicherten Telegrammen enthält. Es dient außerdem der Synchronisation von Threads beim lesenden und schreibenden Zugriff.


_closed

private boolean _closed
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 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:
InterruptedException - Wenn der Thread während des Wartens unterbrochen wurde.

put

public void put(Telegram telegram)
         throws 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:
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.