Class Queue

java.lang.Object
org.jgroups.util.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

    Fields
    Modifier and Type
    Field
    Description
    protected static final org.apache.commons.logging.Log
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    creates an empty queue
  • Method Summary

    Modifier and Type
    Method
    Description
    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
     
    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
    Removes all elements from the queue.
    void
    close(boolean flush_entries)
    Marks the queues as closed.
    boolean
    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 the first element.
    Returns the last element.
    returns the first object on the queue, without removing it.
    peek(long timeout)
    returns the first object on the queue, without removing it.
    Removes 1 element from head or blocks until next element has been added or until queue has been closed
    remove(long timeout)
    Removes 1 element from the head.
    void
    removes a specific object from the queue.
    void
    resets the queue.
    int
    returns the number of objects that are currently in the queue
    prints the size of the queue
    Returns all the elements of the queue
    void
    waitUntilClosed(long timeout)
    Waits until the queue has been closed.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • log

      protected static final org.apache.commons.logging.Log log
  • Constructor Details

    • Queue

      public Queue()
      creates an empty queue
  • Method Details

    • 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.
    • 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

      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
    • addAll

      public void addAll(Collection c) throws QueueClosedException
      Throws:
      QueueClosedException
    • addAll

      public void addAll(List<Object> list) throws QueueClosedException
      Throws:
      QueueClosedException
    • 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
    • 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
      Throws:
      QueueClosedException
    • 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
      Throws:
      QueueClosedException
      TimeoutException
    • 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
      Throws:
      QueueClosedException
    • 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
      Throws:
      QueueClosedException
    • 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
      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 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.
    • 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

      public LinkedList 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

      public String toString()
      prints the size of the queue
      Overrides:
      toString in class Object