Package org.jgroups.util
Class Queue
java.lang.Object
org.jgroups.util.Queue
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
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
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
addAll
(Collection c) void
void
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
clear()
Removes all elements from the queue.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.getFirst()
Returns the first element.getLast()
Returns the last element.peek()
returns the first object on the queue, without removing it.peek
(long timeout) returns the first object on the queue, without removing it.remove()
Removes 1 element from head or blocks until next element has been added or until queue has been closedremove
(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 queuetoString()
prints the size of the queuevalues()
Returns all the elements of the queuevoid
waitUntilClosed
(long timeout) Waits until the queue has been closed.
-
Field Details
-
log
protected static final org.apache.commons.logging.Log log
-
-
Constructor Details
-
Queue
public Queue()creates an empty queue
-
-
Method Details
-
getFirst
Returns the first element. Returns null if no elements are available. -
getLast
Returns the last element. Returns null if no elements are available. -
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
-
add
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
- Throws:
QueueClosedException
-
addAll
- Throws:
QueueClosedException
-
addAtHead
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
-
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
- Throws:
QueueClosedException
-
remove
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
- Throws:
QueueClosedException
TimeoutException
-
removeElement
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- Throws:
QueueClosedException
-
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
- Throws:
QueueClosedException
-
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 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
- Throws:
QueueClosedException
TimeoutException
-
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 anadd
orremove
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.
-
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 invalid input: '<'= 0 means to wait forever
-
reset
public void reset()resets the queue. This operation removes all the objects in the queue and marks the queue open -
values
Returns all the elements of the queue- Returns:
- A copy of the queue
-
size
public int size()returns the number of objects that are currently in the queue -
toString
prints the size of the queue
-