/**
* a bounded {@linkplain blockingqueue blocking queue} backed by an
* array. this queue orders elements fifo (first-in-first-out). the
* <em>head</em> of the queue is that element that has been on the
* queue the longest time. the <em>tail</em> 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.
* <p>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.
* <p>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.
* <p>this class and its iterator implement all of the
* <em>optional</em> methods of the {@link collection} and {@link
* iterator} interfaces.
* <p>this class is a member of the
* <a href="{@docroot}/../technotes/guides/collections/index.html" rel="external nofollow" >
* java collections framework</a>.
* @since 1.5
* @author doug lea
* @param <e> the type of elements held in this collection
**/