org.jgroups.util

Class Queue2


public class Queue2
extends java.lang.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).

Implementation is based on util.concurrent.* classes

Authors:
Bela Ban
Filip Hanik

Field Summary

protected static Log
log

Constructor Summary

Queue2()
creates an empty queue

Method Summary

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.
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.
void
close(boolean flush_entries)
Marks the queues as closed.
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.
String
debug()
Dumps internal state @remove
Vector
getContents()
returns a vector with all the objects currently in the queue
Object
getFirst()
Returns the first element.
Object
getLast()
Returns the last element.
Object
peek()
returns the first object on the queue, without removing it.
Object
peek(long timeout)
returns the first object on the queue, without removing it.
Object
remove()
Removes 1 element from head or blocks until next element has been added or until queue has been closed
Object
remove(long timeout)
Removes 1 element from the head.
void
removeElement(Object obj)
removes a specific object from the queue.
void
reset()
resets the queue.
int
size()
returns the number of objects that are currently in the queue
String
toString()
prints the size of the queue
void
waitUntilEmpty(long timeout)
Blocks until the queue has no elements left.

Field Details

log

protected static Log log

Constructor Details

Queue2

public Queue2()
creates an empty queue

Method Details

add

public void add(Object obj)
            throws QueueClosedException
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


addAtHead

public void addAtHead(Object obj)
            throws QueueClosedException
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


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


debug

public String debug()
Dumps internal state @remove


getContents

public Vector getContents()
returns a vector with all the objects currently in the queue


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()
            throws QueueClosedException
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)
            throws QueueClosedException,
                   TimeoutException
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()
            throws QueueClosedException
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)
            throws QueueClosedException,
                   TimeoutException
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)
            throws QueueClosedException
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


waitUntilEmpty

public void waitUntilEmpty(long timeout)
            throws QueueClosedException,
                   TimeoutException
Blocks until the queue has no elements left. If the queue is empty, the call will return immediately

Parameters:
timeout - Call returns if timeout has elapsed (number of milliseconds). 0 means to wait forever

Throws:
QueueClosedException - Thrown if queue has been closed
TimeoutException - Thrown if timeout has elapsed


Copyright B) 2001,2002 www.jgroups.com . All Rights Reserved.