org.jgroups.util

Class Queue

public class Queue extends Object

Elements are added at the tail and removed from the head. Class is thread-safe in that 1 producer and 1 consumer may add/remove elements concurrently. The class is not explicitely designed for multiple producers or consumers. Implemented as a linked list, so that removal of an element at the head does not cause a right-shift of the remaining elements (as in a Vector-based implementation).

Author: Bela Ban

Field Summary
protected static Loglog
Constructor Summary
Queue()
creates an empty queue
Method Summary
voidadd(Object obj)
adds an object to the tail of this queue If the queue has been closed with close(true) no exception will be thrown if the queue has not been flushed yet.
voidaddAll(Collection c)
voidaddAll(List l)
voidaddAtHead(Object obj)
Adds a new object to the head of the queue basically (obj.equals(queue.remove(queue.add(obj)))) returns true If the queue has been closed with close(true) no exception will be thrown if the queue has not been flushed yet.
voidclear()
Removes all elements from the queue.
voidclose(boolean flush_entries)
Marks the queues as closed.
booleanclosed()
returns true if the Queue has been closed however, this method will return false if the queue has been closed using the close(true) method and the last element has yet not been received.
ObjectgetFirst()
Returns the first element.
ObjectgetLast()
Returns the last element.
Objectpeek()
returns the first object on the queue, without removing it.
Objectpeek(long timeout)
returns the first object on the queue, without removing it.
Objectremove()
Removes 1 element from head or blocks until next element has been added or until queue has been closed
Objectremove(long timeout)
Removes 1 element from the head.
voidremoveElement(Object obj)
removes a specific object from the queue. the object is matched up using the Object.equals method.
voidreset()
resets the queue.
intsize()
returns the number of objects that are currently in the queue
StringtoString()
prints the size of the queue
LinkedListvalues()
Returns all the elements of the queue
voidwaitUntilClosed(long timeout)
Waits until the queue has been closed.

Field Detail

log

protected static final Log log

Constructor Detail

Queue

public Queue()
creates an empty queue

Method Detail

add

public void add(Object obj)
adds an object to the tail of this queue If the queue has been closed with close(true) no exception will be thrown if the queue has not been flushed yet.

Parameters: obj - the object to be added to the queue

Throws: QueueClosedException exception if closed() returns true

addAll

public void addAll(Collection c)

addAll

public void addAll(List l)

addAtHead

public void addAtHead(Object obj)
Adds a new object to the head of the queue basically (obj.equals(queue.remove(queue.add(obj)))) returns true If the queue has been closed with close(true) no exception will be thrown if the queue has not been flushed yet.

Parameters: obj - the object to be added to the queue

Throws: QueueClosedException exception if closed() returns true

clear

public void clear()
Removes all elements from the queue. This method can succeed even when the queue is closed

close

public void close(boolean flush_entries)
Marks the queues as closed. When an add or remove operation is attempted on a closed queue, an exception is thrown.

Parameters: flush_entries When true, a end-of-entries marker is added to the end of the queue. Entries may be added and removed, but when the end-of-entries marker is encountered, the queue is marked as closed. This allows to flush pending messages before closing the queue.

closed

public boolean closed()
returns true if the Queue has been closed however, this method will return false if the queue has been closed using the close(true) method and the last element has yet not been received.

Returns: true if the queue has been closed

getFirst

public Object getFirst()
Returns the first element. Returns null if no elements are available.

getLast

public Object getLast()
Returns the last element. Returns null if no elements are available.

peek

public Object peek()
returns the first object on the queue, without removing it. If the queue is empty this object blocks until the first queue object has been added

Returns: the first object on the queue

peek

public Object peek(long timeout)
returns the first object on the queue, without removing it. If the queue is empty this object blocks until the first queue object has been added or the operation times out

Parameters: timeout how long in milli seconds will this operation wait for an object to be added to the queue before it times out

Returns: the first object on the queue

remove

public Object remove()
Removes 1 element from head or blocks until next element has been added or until queue has been closed

Returns: the first element to be taken of the queue

remove

public Object remove(long timeout)
Removes 1 element from the head. If the queue is empty the operation will wait for timeout ms. if no object is added during the timeout time, a Timout exception is thrown

Parameters: timeout - the number of milli seconds this operation will wait before it times out

Returns: the first object in the queue

removeElement

public void removeElement(Object obj)
removes a specific object from the queue. the object is matched up using the Object.equals method.

Parameters: obj the actual object to be removed from the queue

reset

public void reset()
resets the queue. This operation removes all the objects in the queue and marks the queue open

size

public int size()
returns the number of objects that are currently in the queue

toString

public String toString()
prints the size of the queue

values

public LinkedList values()
Returns all the elements of the queue

Returns: A copy of the queue

waitUntilClosed

public void waitUntilClosed(long timeout)
Waits until the queue has been closed. Returns immediately if already closed

Parameters: timeout Number of milliseconds to wait. A value <= 0 means to wait forever

Copyright ? 1998-2005 Bela Ban. All Rights Reserved.