Home » openjdk-7 » java » util » concurrent » [javadoc | source]
java.util.concurrent
public class: ArrayBlockingQueue [javadoc | source]
java.lang.Object
   java.util.AbstractCollection<E>
      java.util.AbstractQueue<E>
         java.util.concurrent.ArrayBlockingQueue

All Implemented Interfaces:
    BlockingQueue, java$io$Serializable, Queue, Collection

A bounded {@linkplain BlockingQueue blocking queue} backed by an array. This queue orders elements FIFO (first-in-first-out). The head of the queue is that element that has been on the queue the longest time. The tail of the queue is that element that has been on the queue the shortest time. New elements are inserted at the tail of the queue, and the queue retrieval operations obtain elements at the head of the queue.

This is a classic "bounded buffer", in which a fixed-sized array holds elements inserted by producers and extracted by consumers. Once created, the capacity cannot be changed. Attempts to {@code put} an element into a full queue will result in the operation blocking; attempts to {@code take} an element from an empty queue will similarly block.

This class supports an optional fairness policy for ordering waiting producer and consumer threads. By default, this ordering is not guaranteed. However, a queue constructed with fairness set to {@code true} grants threads access in FIFO order. Fairness generally decreases throughput but reduces variability and avoids starvation.

This class and its iterator implement all of the optional methods of the Collection and Iterator interfaces.

This class is a member of the Java Collections Framework.

Field Summary
final  Object[] items    The queued items 
 int takeIndex    items index for next take, poll, peek or remove 
 int putIndex    items index for next put, offer, or add 
 int count    Number of elements in the queue 
final  ReentrantLock lock    Main lock guarding all access 
Constructor:
 public ArrayBlockingQueue(int capacity) 
 public ArrayBlockingQueue(int capacity,
    boolean fair) 
 public ArrayBlockingQueue(int capacity,
    boolean fair,
    Collection<? extends E> c) 
    Creates an {@code ArrayBlockingQueue} with the given (fixed) capacity, the specified access policy and initially containing the elements of the given collection, added in traversal order of the collection's iterator.
    Parameters:
    capacity - the capacity of this queue
    fair - if {@code true} then queue accesses for threads blocked on insertion or removal, are processed in FIFO order; if {@code false} the access order is unspecified.
    c - the collection of elements to initially contain
    Throws:
    IllegalArgumentException - if {@code capacity} is less than {@code c.size()}, or less than 1.
    NullPointerException - if the specified collection or any of its elements are null
Method from java.util.concurrent.ArrayBlockingQueue Summary:
add,   cast,   clear,   contains,   dec,   drainTo,   drainTo,   inc,   itemAt,   iterator,   offer,   offer,   peek,   poll,   poll,   put,   remainingCapacity,   remove,   removeAt,   size,   take,   toArray,   toArray,   toString
Methods from java.util.AbstractQueue:
add,   addAll,   clear,   element,   remove
Methods from java.util.AbstractCollection:
add,   addAll,   clear,   contains,   containsAll,   isEmpty,   iterator,   remove,   removeAll,   retainAll,   size,   toArray,   toArray,   toString
Methods from java.lang.Object:
clone,   equals,   finalize,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from java.util.concurrent.ArrayBlockingQueue Detail:
 public boolean add(E e) 
    Inserts the specified element at the tail of this queue if it is possible to do so immediately without exceeding the queue's capacity, returning {@code true} upon success and throwing an {@code IllegalStateException} if this queue is full.
 static E cast(Object item) 
 public  void clear() 
    Atomically removes all of the elements from this queue. The queue will be empty after this call returns.
 public boolean contains(Object o) 
    Returns {@code true} if this queue contains the specified element. More formally, returns {@code true} if and only if this queue contains at least one element {@code e} such that {@code o.equals(e)}.
 final int dec(int i) 
    Circularly decrement i.
 public int drainTo(Collection<? super E> c) 
 public int drainTo(Collection<? super E> c,
    int maxElements) 
 final int inc(int i) 
    Circularly increment i.
 final E itemAt(int i) 
    Returns item at index i.
 public Iterator<E> iterator() 
    Returns an iterator over the elements in this queue in proper sequence. The elements will be returned in order from first (head) to last (tail).

    The returned {@code Iterator} is a "weakly consistent" iterator that will never throw ConcurrentModificationException , and guarantees to traverse elements as they existed upon construction of the iterator, and may (but is not guaranteed to) reflect any modifications subsequent to construction.

 public boolean offer(E e) 
    Inserts the specified element at the tail of this queue if it is possible to do so immediately without exceeding the queue's capacity, returning {@code true} upon success and {@code false} if this queue is full. This method is generally preferable to method #add , which can fail to insert an element only by throwing an exception.
 public boolean offer(E e,
    long timeout,
    TimeUnit unit) throws InterruptedException 
    Inserts the specified element at the tail of this queue, waiting up to the specified wait time for space to become available if the queue is full.
 public E peek() 
 public E poll() 
 public E poll(long timeout,
    TimeUnit unit) throws InterruptedException 
 public  void put(E e) throws InterruptedException 
    Inserts the specified element at the tail of this queue, waiting for space to become available if the queue is full.
 public int remainingCapacity() 
    Returns the number of additional elements that this queue can ideally (in the absence of memory or resource constraints) accept without blocking. This is always equal to the initial capacity of this queue less the current {@code size} of this queue.

    Note that you cannot always tell if an attempt to insert an element will succeed by inspecting {@code remainingCapacity} because it may be the case that another thread is about to insert or remove an element.

 public boolean remove(Object o) 
    Removes a single instance of the specified element from this queue, if it is present. More formally, removes an element {@code e} such that {@code o.equals(e)}, if this queue contains one or more such elements. Returns {@code true} if this queue contained the specified element (or equivalently, if this queue changed as a result of the call).

    Removal of interior elements in circular array based queues is an intrinsically slow and disruptive operation, so should be undertaken only in exceptional circumstances, ideally only when the queue is known not to be accessible by other threads.

  void removeAt(int i) 
    Deletes item at position i. Utility for remove and iterator.remove. Call only when holding lock.
 public int size() 
    Returns the number of elements in this queue.
 public E take() throws InterruptedException 
 public Object[] toArray() 
    Returns an array containing all of the elements in this queue, in proper sequence.

    The returned array will be "safe" in that no references to it are maintained by this queue. (In other words, this method must allocate a new array). The caller is thus free to modify the returned array.

    This method acts as bridge between array-based and collection-based APIs.

 public T[] toArray(T[] a) 
    Returns an array containing all of the elements in this queue, in proper sequence; the runtime type of the returned array is that of the specified array. If the queue fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this queue.

    If this queue fits in the specified array with room to spare (i.e., the array has more elements than this queue), the element in the array immediately following the end of the queue is set to {@code null}.

    Like the #toArray() method, this method acts as bridge between array-based and collection-based APIs. Further, this method allows precise control over the runtime type of the output array, and may, under certain circumstances, be used to save allocation costs.

    Suppose {@code x} is a queue known to contain only strings. The following code can be used to dump the queue into a newly allocated array of {@code String}:

        String[] y = x.toArray(new String[0]);
    Note that {@code toArray(new Object[0])} is identical in function to {@code toArray()}.
 public String toString()