de.bsvrz.sys.funclib.concurrent
Class BufferedQueue<E>

java.lang.Object
  extended by de.bsvrz.sys.funclib.concurrent.BufferedQueue<E>

public class BufferedQueue<E>
extends Object

Queue zum Austausch von Nachrichten zwischen Threads. Mit der Methode put(E) können beliebige Objekte (Nachrichten) in die Queue eingetragen (gesendet) werden und i.a. von einem anderen Thread mit den Methode take() aus der Queue entnommen (empfangen) werden. Die Anzahl der Nachrichten in der Queue ist beschränkt. Die Nachrichten werden in der Reihenfolge empfangen in der sie versendet wurden (first in first out, FIFO). Gesendete Nachrichten stehen erst dann empfangsseitig zur Verfügung, wenn die halbe Kapizität der Queue erreicht ist oder die Methode flush() aufgerufen wurde.

Author:
Kappich Systemberatung

Field Summary
private  int _capacity
           
private  int _putIndex
           
private  Object[] _putObjects
           
private  Object[] _recycleArray
           
private  int _takeIndex
           
private  int _takeLimit
           
private  Object[] _takeObjects
           
private  Object _transferLock
           
private  Object[] _transferObjects
           
private  int _transferSize
           
 
Constructor Summary
BufferedQueue(int capacity)
           
 
Method Summary
 void flush()
           
 void put(E message)
          Sendet eine Nachricht in die Queue.
 E take()
          Empfängt und entfernt eine Nachricht aus der Queue.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_putObjects

private Object[] _putObjects

_takeObjects

private Object[] _takeObjects

_putIndex

private int _putIndex

_takeIndex

private int _takeIndex

_takeLimit

private int _takeLimit

_capacity

private final int _capacity

_transferLock

private final Object _transferLock

_transferSize

private int _transferSize

_transferObjects

private Object[] _transferObjects

_recycleArray

private Object[] _recycleArray
Constructor Detail

BufferedQueue

public BufferedQueue(int capacity)
Method Detail

flush

public void flush()
           throws InterruptedException
Throws:
InterruptedException

put

public void put(E message)
         throws InterruptedException
Sendet eine Nachricht in die Queue.

Parameters:
message - Zu versendende Nachricht.
Throws:
InterruptedException

take

public E take()
       throws InterruptedException
Empfängt und entfernt eine Nachricht aus der Queue. Wenn die Queue leer ist, dann wartet die Methode, bis eine Nachricht in die Queue gesendet wurde. Wenn mehrere Nachrichten in der Queue vorhanden sind, wird die Nachricht empfangen und entfernt, die als erstes in die Queue gesendet wurde.

Returns:
Empfangene Nachricht.
Throws:
InterruptedException - Wenn der Thread unterbrochen wurde während auf Nachrichten gewartet wurde.