Diff between doug lea's & java 6 LinkedBlockingDeque
jmesnil Jun 23, 2009 11:10 AMFor https://jira.jboss.org/jira/browse/JBMESSAGING-1437, we use a LinkedBlockingDeque as the underlying data structures for a Queue's message references.
This class appeared in Java 6.
For Java 5, we imported in our code base, the backport from doug lea http://gee.cs.oswego.edu/dl/concurrency-interest/index.html
Unfortunately, the base interface Deque is only in Java 6 only so it is not possible to have common code which works both on Java 5 and Java 6 (with the deque created through reflection) since Java 5 does not have the required interface hierarchy.
This means we will use the backport when running on Java 6 too.
For reference, here is the diff between the backport and the sources in Java 6 of the 3 required types: Deque, BlockingDeque and LinkedBlockingDeque.
I have not spotted obvious differences in the code but the javadoc and the method orders are different making a lot of noise in the diff
diff -r lea/BlockingDeque.java java6/BlockingDeque.java
2,4c2,5
< * Written by Doug Lea with assistance from members of JCP JSR-166
< * Expert Group and released to the public domain, as explained at
< * http://creativecommons.org/licenses/publicdomain
---
> * @(#)BlockingDeque.java 1.5 06/04/21
> *
> * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
> * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
7,9c8,9
< package org.jboss.messaging.utils.concurrent; // XXX This belongs in java.util!!! XXX
< import java.util.concurrent.*; // XXX This import goes away XXX
< import java.util.*;
---
> package java.util.concurrent;
> import java.util.*;
12,15c12,23
< * A {@link Deque} that additionally supports operations that wait for
< * the deque to become non-empty when retrieving an element, and wait
< * for space to become available in the deque when storing an
< * element. These methods are summarized in the following table:<p>
---
> * A {@link Deque} that additionally supports blocking operations that wait
> * for the deque to become non-empty when retrieving an element, and wait for
> * space to become available in the deque when storing an element.
> *
> * <p><tt>BlockingDeque</tt> methods come in four forms, with different ways
> * of handling operations that cannot be satisfied immediately, but may be
> * satisfied at some point in the future:
> * one throws an exception, the second returns a special value (either
> * <tt>null</tt> or <tt>false</tt>, depending on the operation), the third
> * blocks the current thread indefinitely until the operation can succeed,
> * and the fourth blocks for only a given maximum time limit before giving
> * up. These methods are summarized in the following table:
16a25
> * <p>
19,21c28
< * <td></td>
< * <td ALIGN=CENTER COLSPAN = 2> <b>First Element (Head)</b></td>
< * <td ALIGN=CENTER COLSPAN = 2> <b>Last Element (Tail)</b></td>
---
> * <td ALIGN=CENTER COLSPAN = 5> <b>First Element (Head)</b></td>
25,28c32,35
< * <td ALIGN=CENTER><em>Block</em></td>
< * <td ALIGN=CENTER><em>Time out</em></td>
< * <td ALIGN=CENTER><em>Block</em></td>
< * <td ALIGN=CENTER><em>Time out</em></td>
---
> * <td ALIGN=CENTER><em>Throws exception</em></td>
> * <td ALIGN=CENTER><em>Special value</em></td>
> * <td ALIGN=CENTER><em>Blocks</em></td>
> * <td ALIGN=CENTER><em>Times out</em></td>
31a39,40
> * <td>{@link #addFirst addFirst(e)}</td>
> * <td>{@link #offerFirst(Object) offerFirst(e)}</td>
34,35d42
< * <td>{@link #putLast putLast(e)}</td>
< * <td>{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
38a46,47
> * <td>{@link #removeFirst removeFirst()}</td>
> * <td>{@link #pollFirst pollFirst()}</td>
40c49,78
< * <td>{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
---
> * <td>{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
> * </tr>
> * <tr>
> * <td><b>Examine</b></td>
> * <td>{@link #getFirst getFirst()}</td>
> * <td>{@link #peekFirst peekFirst()}</td>
> * <td><em>not applicable</em></td>
> * <td><em>not applicable</em></td>
> * </tr>
> * <tr>
> * <td ALIGN=CENTER COLSPAN = 5> <b>Last Element (Tail)</b></td>
> * </tr>
> * <tr>
> * <td></td>
> * <td ALIGN=CENTER><em>Throws exception</em></td>
> * <td ALIGN=CENTER><em>Special value</em></td>
> * <td ALIGN=CENTER><em>Blocks</em></td>
> * <td ALIGN=CENTER><em>Times out</em></td>
> * </tr>
> * <tr>
> * <td><b>Insert</b></td>
> * <td>{@link #addLast addLast(e)}</td>
> * <td>{@link #offerLast(Object) offerLast(e)}</td>
> * <td>{@link #putLast putLast(e)}</td>
> * <td>{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
> * </tr>
> * <tr>
> * <td><b>Remove</b></td>
> * <td>{@link #removeLast() removeLast()}</td>
> * <td>{@link #pollLast() pollLast()}</td>
43a82,88
> * <tr>
> * <td><b>Examine</b></td>
> * <td>{@link #getLast getLast()}</td>
> * <td>{@link #peekLast peekLast()}</td>
> * <td><em>not applicable</em></td>
> * <td><em>not applicable</em></td>
> * </tr>
46,51c91,98
< * <p>Like any {@link BlockingQueue}, a <tt>BlockingDeque</tt> is
< * thread safe and may (or may not) be capacity-constrained. A
< * <tt>BlockingDeque</tt> implementation may be used directly as a
< * FIFO <tt>BlockingQueue</tt>. The blocking methods inherited from
< * the <tt>BlockingQueue</tt> interface are precisely equivalent to
< * <tt>BlockingDeque</tt> methods as indicated in the following table:<p>
---
> * <p>Like any {@link BlockingQueue}, a <tt>BlockingDeque</tt> is thread safe,
> * does not permit null elements, and may (or may not) be
> * capacity-constrained.
> *
> * <p>A <tt>BlockingDeque</tt> implementation may be used directly as a FIFO
> * <tt>BlockingQueue</tt>. The methods inherited from the
> * <tt>BlockingQueue</tt> interface are precisely equivalent to
> * <tt>BlockingDeque</tt> methods as indicated in the following table:
52a100
> * <p>
59,68c107,122
< * <tr>
< * <td>{@link java.util.concurrent.BlockingQueue#put put(e)}</td>
< * <td>{@link #putLast putLast(e)}</td>
< * </tr>
< * <tr>
< * <td>{@link java.util.concurrent.BlockingQueue#take take()}</td>
< * <td>{@link #takeFirst takeFirst()}</td>
< * </tr>
< * <tr>
< * <td>{@link java.util.concurrent.BlockingQueue#offer(Object, long, TimeUnit) offer(e, time. unit)}</td>
---
> * <td ALIGN=CENTER COLSPAN = 2> <b>Insert</b></td>
> * </tr>
> * <tr>
> * <td>{@link #add(Object) add(e)}</td>
> * <td>{@link #addLast(Object) addLast(e)}</td>
> * </tr>
> * <tr>
> * <td>{@link #offer(Object) offer(e)}</td>
> * <td>{@link #offerLast(Object) offerLast(e)}</td>
> * </tr>
> * <tr>
> * <td>{@link #put(Object) put(e)}</td>
> * <td>{@link #putLast(Object) putLast(e)}</td>
> * </tr>
> * <tr>
> * <td>{@link #offer(Object, long, TimeUnit) offer(e, time, unit)}</td>
70,72c124,141
< * </tr>
< * <tr>
< * <td>{@link java.util.concurrent.BlockingQueue#poll(long, TimeUnit) poll(time, unit)}</td>
---
> * </tr>
> * <tr>
> * <td ALIGN=CENTER COLSPAN = 2> <b>Remove</b></td>
> * </tr>
> * <tr>
> * <td>{@link #remove() remove()}</td>
> * <td>{@link #removeFirst() removeFirst()}</td>
> * </tr>
> * <tr>
> * <td>{@link #poll() poll()}</td>
> * <td>{@link #pollFirst() pollFirst()}</td>
> * </tr>
> * <tr>
> * <td>{@link #take() take()}</td>
> * <td>{@link #takeFirst() takeFirst()}</td>
> * </tr>
> * <tr>
> * <td>{@link #poll(long, TimeUnit) poll(time, unit)}</td>
74c143,154
< * </tr>
---
> * </tr>
> * <tr>
> * <td ALIGN=CENTER COLSPAN = 2> <b>Examine</b></td>
> * </tr>
> * <tr>
> * <td>{@link #element() element()}</td>
> * <td>{@link #getFirst() getFirst()}</td>
> * </tr>
> * <tr>
> * <td>{@link #peek() peek()}</td>
> * <td>{@link #peekFirst() peekFirst()}</td>
> * </tr>
76a157,162
> * <p>Memory consistency effects: As with other concurrent
> * collections, actions in a thread prior to placing an object into a
> * {@code BlockingDeque}
> * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
> * actions subsequent to the access or removal of that element from
> * the {@code BlockingDeque} in another thread.
79c165
< * <a href="{@docRoot}/../guide/collections/index.html">
---
> * <a href="{@docRoot}/../technotes/guides/collections/index.html">
86c172,178
< public interface BlockingDeque<E> extends Deque<E>, BlockingQueue<E> {
---
> public interface BlockingDeque<E> extends BlockingQueue<E>, Deque<E> {
> /*
> * We have "diamond" multiple interface inheritance here, and that
> * introduces ambiguities. Methods might end up with different
> * specs depending on the branch chosen by javadoc. Thus a lot of
> * methods specs here are copied from superinterfaces.
> */
89,95c181,193
< * Adds the specified element as the first element of this deque,
< * waiting if necessary for space to become available.
< * @param o the element to add
< * @throws InterruptedException if interrupted while waiting.
< * @throws NullPointerException if the specified element is <tt>null</tt>.
< */
< void putFirst(E o) throws InterruptedException;
---
> * Inserts the specified element at the front of this deque if it is
> * possible to do so immediately without violating capacity restrictions,
> * throwing an <tt>IllegalStateException</tt> if no space is currently
> * available. When using a capacity-restricted deque, it is generally
> * preferable to use {@link #offerFirst(Object) offerFirst}.
> *
> * @param e the element to add
> * @throws IllegalStateException {@inheritDoc}
> * @throws ClassCastException {@inheritDoc}
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException {@inheritDoc}
> */
> void addFirst(E e);
98,102c196,238
< * Adds the specified element as the last element of this deque,
< * waiting if necessary for space to become available.
< * @param o the element to add
< * @throws InterruptedException if interrupted while waiting.
< * @throws NullPointerException if the specified element is <tt>null</tt>.
---
> * Inserts the specified element at the end of this deque if it is
> * possible to do so immediately without violating capacity restrictions,
> * throwing an <tt>IllegalStateException</tt> if no space is currently
> * available. When using a capacity-restricted deque, it is generally
> * preferable to use {@link #offerLast(Object) offerLast}.
> *
> * @param e the element to add
> * @throws IllegalStateException {@inheritDoc}
> * @throws ClassCastException {@inheritDoc}
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException {@inheritDoc}
> */
> void addLast(E e);
>
> /**
> * Inserts the specified element at the front of this deque if it is
> * possible to do so immediately without violating capacity restrictions,
> * returning <tt>true</tt> upon success and <tt>false</tt> if no space is
> * currently available.
> * When using a capacity-restricted deque, this method is generally
> * preferable to the {@link #addFirst(Object) addFirst} method, which can
> * fail to insert an element only by throwing an exception.
> *
> * @param e the element to add
> * @throws ClassCastException {@inheritDoc}
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException {@inheritDoc}
> */
> boolean offerFirst(E e);
>
> /**
> * Inserts the specified element at the end of this deque if it is
> * possible to do so immediately without violating capacity restrictions,
> * returning <tt>true</tt> upon success and <tt>false</tt> if no space is
> * currently available.
> * When using a capacity-restricted deque, this method is generally
> * preferable to the {@link #addLast(Object) addLast} method, which can
> * fail to insert an element only by throwing an exception.
> *
> * @param e the element to add
> * @throws ClassCastException {@inheritDoc}
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException {@inheritDoc}
104c240
< void putLast(E o) throws InterruptedException;
---
> boolean offerLast(E e);
107,110c243,252
< * Retrieves and removes the first element of this deque, waiting
< * if no elements are present on this deque.
< * @return the head of this deque
< * @throws InterruptedException if interrupted while waiting.
---
> * Inserts the specified element at the front of this deque,
> * waiting if necessary for space to become available.
> *
> * @param e the element to add
> * @throws InterruptedException if interrupted while waiting
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
112c254
< E takeFirst() throws InterruptedException;
---
> void putFirst(E e) throws InterruptedException;
115,118c257,266
< * Retrieves and removes the last element of this deque, waiting
< * if no elements are present on this deque.
< * @return the head of this deque
< * @throws InterruptedException if interrupted while waiting.
---
> * Inserts the specified element at the end of this deque,
> * waiting if necessary for space to become available.
> *
> * @param e the element to add
> * @throws InterruptedException if interrupted while waiting
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
120c268
< E takeLast() throws InterruptedException;
---
> void putLast(E e) throws InterruptedException;
123,124c271,272
< * Inserts the specified element as the first element of this deque,
< * waiting if necessary up to the specified wait time for space to
---
> * Inserts the specified element at the front of this deque,
> * waiting up to the specified wait time if necessary for space to
126c274,275
< * @param o the element to add
---
> *
> * @param e the element to add
128c277
< * <tt>unit</tt>
---
> * <tt>unit</tt>
130c279
< * <tt>timeout</tt> parameter
---
> * <tt>timeout</tt> parameter
132,134c281,287
< * the specified waiting time elapses before space is available.
< * @throws InterruptedException if interrupted while waiting.
< * @throws NullPointerException if the specified element is <tt>null</tt>.
---
> * the specified waiting time elapses before space is available
> * @throws InterruptedException if interrupted while waiting
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
136c289
< boolean offerFirst(E o, long timeout, TimeUnit unit)
---
> boolean offerFirst(E e, long timeout, TimeUnit unit)
140,141c293,294
< * Inserts the specified element as the last element of this deque,
< * waiting if necessary up to the specified wait time for space to
---
> * Inserts the specified element at the end of this deque,
> * waiting up to the specified wait time if necessary for space to
143c296,297
< * @param o the element to add
---
> *
> * @param e the element to add
145c299
< * <tt>unit</tt>
---
> * <tt>unit</tt>
147c301
< * <tt>timeout</tt> parameter
---
> * <tt>timeout</tt> parameter
149,151c303,309
< * the specified waiting time elapses before space is available.
< * @throws InterruptedException if interrupted while waiting.
< * @throws NullPointerException if the specified element is <tt>null</tt>.
---
> * the specified waiting time elapses before space is available
> * @throws InterruptedException if interrupted while waiting
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
153c311
< boolean offerLast(E o, long timeout, TimeUnit unit)
---
> boolean offerLast(E e, long timeout, TimeUnit unit)
155a314,330
> /**
> * Retrieves and removes the first element of this deque, waiting
> * if necessary until an element becomes available.
> *
> * @return the head of this deque
> * @throws InterruptedException if interrupted while waiting
> */
> E takeFirst() throws InterruptedException;
>
> /**
> * Retrieves and removes the last element of this deque, waiting
> * if necessary until an element becomes available.
> *
> * @return the tail of this deque
> * @throws InterruptedException if interrupted while waiting
> */
> E takeLast() throws InterruptedException;
159,160c334,336
< * if necessary up to the specified wait time if no elements are
< * present on this deque.
---
> * up to the specified wait time if necessary for an element to
> * become available.
> *
162c338
< * <tt>unit</tt>
---
> * <tt>unit</tt>
164,167c340,343
< * <tt>timeout</tt> parameter
< * @return the head of this deque, or <tt>null</tt> if the
< * specified waiting time elapses before an element is present.
< * @throws InterruptedException if interrupted while waiting.
---
> * <tt>timeout</tt> parameter
> * @return the head of this deque, or <tt>null</tt> if the specified
> * waiting time elapses before an element is available
> * @throws InterruptedException if interrupted while waiting
174,175c350,352
< * if necessary up to the specified wait time if no elements are
< * present on this deque.
---
> * up to the specified wait time if necessary for an element to
> * become available.
> *
177c354
< * <tt>unit</tt>
---
> * <tt>unit</tt>
179,182c356,359
< * <tt>timeout</tt> parameter
< * @return the head of this deque, or <tt>null</tt> if the
< * specified waiting time elapses before an element is present.
< * @throws InterruptedException if interrupted while waiting.
---
> * <tt>timeout</tt> parameter
> * @return the tail of this deque, or <tt>null</tt> if the specified
> * waiting time elapses before an element is available
> * @throws InterruptedException if interrupted while waiting
188,209c365,472
< * Adds the specified element as the last element of this deque,
< * waiting if necessary for space to become available. This
< * method is equivalent to to putLast
< * @param o the element to add
< * @throws InterruptedException if interrupted while waiting.
< * @throws NullPointerException if the specified element is <tt>null</tt>.
< */
< void put(E o) throws InterruptedException;
<
< /**
< * Inserts the specified element as the lest element of this
< * deque, if possible. When using deques that may impose
< * insertion restrictions (for example capacity bounds), method
< * <tt>offer</tt> is generally preferable to method {@link
< * Collection#add}, which can fail to insert an element only by
< * throwing an exception. This method is equivalent to to
< * offerLast
< *
< * @param o the element to add.
< * @return <tt>true</tt> if it was possible to add the element to
< * this deque, else <tt>false</tt>
< * @throws NullPointerException if the specified element is <tt>null</tt>
---
> * Removes the first occurrence of the specified element from this deque.
> * If the deque does not contain the element, it is unchanged.
> * More formally, removes the first element <tt>e</tt> such that
> * <tt>o.equals(e)</tt> (if such an element exists).
> * Returns <tt>true</tt> if this deque contained the specified element
> * (or equivalently, if this deque changed as a result of the call).
> *
> * @param o element to be removed from this deque, if present
> * @return <tt>true</tt> if an element was removed as a result of this call
> * @throws ClassCastException if the class of the specified element
> * is incompatible with this deque (optional)
> * @throws NullPointerException if the specified element is null (optional)
> */
> boolean removeFirstOccurrence(Object o);
>
> /**
> * Removes the last occurrence of the specified element from this deque.
> * If the deque does not contain the element, it is unchanged.
> * More formally, removes the last element <tt>e</tt> such that
> * <tt>o.equals(e)</tt> (if such an element exists).
> * Returns <tt>true</tt> if this deque contained the specified element
> * (or equivalently, if this deque changed as a result of the call).
> *
> * @param o element to be removed from this deque, if present
> * @return <tt>true</tt> if an element was removed as a result of this call
> * @throws ClassCastException if the class of the specified element
> * is incompatible with this deque (optional)
> * @throws NullPointerException if the specified element is null (optional)
> */
> boolean removeLastOccurrence(Object o);
>
> // *** BlockingQueue methods ***
>
> /**
> * Inserts the specified element into the queue represented by this deque
> * (in other words, at the tail of this deque) if it is possible to do so
> * immediately without violating capacity restrictions, returning
> * <tt>true</tt> upon success and throwing an
> * <tt>IllegalStateException</tt> if no space is currently available.
> * When using a capacity-restricted deque, it is generally preferable to
> * use {@link #offer(Object) offer}.
> *
> * <p>This method is equivalent to {@link #addLast(Object) addLast}.
> *
> * @param e the element to add
> * @throws IllegalStateException {@inheritDoc}
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
> */
> boolean add(E e);
>
> /**
> * Inserts the specified element into the queue represented by this deque
> * (in other words, at the tail of this deque) if it is possible to do so
> * immediately without violating capacity restrictions, returning
> * <tt>true</tt> upon success and <tt>false</tt> if no space is currently
> * available. When using a capacity-restricted deque, this method is
> * generally preferable to the {@link #add} method, which can fail to
> * insert an element only by throwing an exception.
> *
> * <p>This method is equivalent to {@link #offerLast(Object) offerLast}.
> *
> * @param e the element to add
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
> */
> boolean offer(E e);
>
> /**
> * Inserts the specified element into the queue represented by this deque
> * (in other words, at the tail of this deque), waiting if necessary for
> * space to become available.
> *
> * <p>This method is equivalent to {@link #putLast(Object) putLast}.
> *
> * @param e the element to add
> * @throws InterruptedException {@inheritDoc}
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
> */
> void put(E e) throws InterruptedException;
>
> /**
> * Inserts the specified element into the queue represented by this deque
> * (in other words, at the tail of this deque), waiting up to the
> * specified wait time if necessary for space to become available.
> *
> * <p>This method is equivalent to
> * {@link #offerLast(Object,long,TimeUnit) offerLast}.
> *
> * @param e the element to add
> * @return <tt>true</tt> if the element was added to this deque, else
> * <tt>false</tt>
> * @throws InterruptedException {@inheritDoc}
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
211c474
< boolean offer(E o, long timeout, TimeUnit unit)
---
> boolean offer(E e, long timeout, TimeUnit unit)
215,217c478,507
< * Retrieves and removes the first element of this deque, waiting
< * if no elements are present on this deque.
< * This method is equivalent to to takeFirst
---
> * Retrieves and removes the head of the queue represented by this deque
> * (in other words, the first element of this deque).
> * This method differs from {@link #poll poll} only in that it
> * throws an exception if this deque is empty.
> *
> * <p>This method is equivalent to {@link #removeFirst() removeFirst}.
> *
> * @return the head of the queue represented by this deque
> * @throws NoSuchElementException if this deque is empty
> */
> E remove();
>
> /**
> * Retrieves and removes the head of the queue represented by this deque
> * (in other words, the first element of this deque), or returns
> * <tt>null</tt> if this deque is empty.
> *
> * <p>This method is equivalent to {@link #pollFirst()}.
> *
> * @return the head of this deque, or <tt>null</tt> if this deque is empty
> */
> E poll();
>
> /**
> * Retrieves and removes the head of the queue represented by this deque
> * (in other words, the first element of this deque), waiting if
> * necessary until an element becomes available.
> *
> * <p>This method is equivalent to {@link #takeFirst() takeFirst}.
> *
219c509
< * @throws InterruptedException if interrupted while waiting.
---
> * @throws InterruptedException if interrupted while waiting
224,231c514,520
< * Retrieves and removes the first element of this deque, waiting
< * if necessary up to the specified wait time if no elements are
< * present on this deque. This method is equivalent to to
< * pollFirst
< * @param timeout how long to wait before giving up, in units of
< * <tt>unit</tt>
< * @param unit a <tt>TimeUnit</tt> determining how to interpret the
< * <tt>timeout</tt> parameter
---
> * Retrieves and removes the head of the queue represented by this deque
> * (in other words, the first element of this deque), waiting up to the
> * specified wait time if necessary for an element to become available.
> *
> * <p>This method is equivalent to
> * {@link #pollFirst(long,TimeUnit) pollFirst}.
> *
233,234c522,523
< * specified waiting time elapses before an element is present.
< * @throws InterruptedException if interrupted while waiting.
---
> * specified waiting time elapses before an element is available
> * @throws InterruptedException if interrupted while waiting
237a527,613
>
> /**
> * Retrieves, but does not remove, the head of the queue represented by
> * this deque (in other words, the first element of this deque).
> * This method differs from {@link #peek peek} only in that it throws an
> * exception if this deque is empty.
> *
> * <p>This method is equivalent to {@link #getFirst() getFirst}.
> *
> * @return the head of this deque
> * @throws NoSuchElementException if this deque is empty
> */
> E element();
>
> /**
> * Retrieves, but does not remove, the head of the queue represented by
> * this deque (in other words, the first element of this deque), or
> * returns <tt>null</tt> if this deque is empty.
> *
> * <p>This method is equivalent to {@link #peekFirst() peekFirst}.
> *
> * @return the head of this deque, or <tt>null</tt> if this deque is empty
> */
> E peek();
>
> /**
> * Removes the first occurrence of the specified element from this deque.
> * If the deque does not contain the element, it is unchanged.
> * More formally, removes the first element <tt>e</tt> such that
> * <tt>o.equals(e)</tt> (if such an element exists).
> * Returns <tt>true</tt> if this deque contained the specified element
> * (or equivalently, if this deque changed as a result of the call).
> *
> * <p>This method is equivalent to
> * {@link #removeFirstOccurrence(Object) removeFirstOccurrence}.
> *
> * @param o element to be removed from this deque, if present
> * @return <tt>true</tt> if this deque changed as a result of the call
> * @throws ClassCastException if the class of the specified element
> * is incompatible with this deque (optional)
> * @throws NullPointerException if the specified element is null (optional)
> */
> boolean remove(Object o);
>
> /**
> * Returns <tt>true</tt> if this deque contains the specified element.
> * More formally, returns <tt>true</tt> if and only if this deque contains
> * at least one element <tt>e</tt> such that <tt>o.equals(e)</tt>.
> *
> * @param o object to be checked for containment in this deque
> * @return <tt>true</tt> if this deque contains the specified element
> * @throws ClassCastException if the class of the specified element
> * is incompatible with this deque (optional)
> * @throws NullPointerException if the specified element is null (optional)
> */
> public boolean contains(Object o);
>
> /**
> * Returns the number of elements in this deque.
> *
> * @return the number of elements in this deque
> */
> public int size();
>
> /**
> * Returns an iterator over the elements in this deque in proper sequence.
> * The elements will be returned in order from first (head) to last (tail).
> *
> * @return an iterator over the elements in this deque in proper sequence
> */
> Iterator<E> iterator();
>
> // *** Stack methods ***
>
> /**
> * Pushes an element onto the stack represented by this deque. In other
> * words, inserts the element at the front of this deque unless it would
> * violate capacity restrictions.
> *
> * <p>This method is equivalent to {@link #addFirst(Object) addFirst}.
> *
> * @throws IllegalStateException {@inheritDoc}
> * @throws ClassCastException {@inheritDoc}
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException {@inheritDoc}
> */
> void push(E e);
diff -r lea/Deque.java java6/Deque.java
2,4c2,5
< * Written by Doug Lea and Josh Bloch with assistance from members of
< * JCP JSR-166 Expert Group and released to the public domain, as explained
< * at http://creativecommons.org/licenses/publicdomain
---
> * @(#)Deque.java 1.5 06/04/21
> *
> * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
> * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
7,8c8
< package org.jboss.messaging.utils.concurrent; // XXX This belongs in java.util!!! XXX
< import java.util.*; // XXX This import goes away XXX
---
> package java.util;
28,30c28,31
< * <p>The twelve methods described above are are summarized in the
< * follwoing table:<p>
< *
---
> * <p>The twelve methods described above are summarized in the
> * following table:
> *
> * <p>
40c41
< * <td ALIGN=CENTER><em>Returns special value</em></td>
---
> * <td ALIGN=CENTER><em>Special value</em></td>
42c43
< * <td ALIGN=CENTER><em>Returns special value</em></td>
---
> * <td ALIGN=CENTER><em>Special value</em></td>
69c70
< * added to the end of the deque and removed from the beginning. The methods
---
> * added at the end of the deque and removed from the beginning. The methods
71c72
< * <tt>Deque</tt> methods as indicated in the following table:<p>
---
> * <tt>Deque</tt> methods as indicated in the following table:
72a74
> * <p>
79,83d80
< * <tr>
< * <td>{@link java.util.Queue#offer offer(e)}</td>
< * <td>{@link #offerLast offerLast(e)}</td>
< * </tr>
< * <tr>
86,91c83,88
< * </tr>
< * <tr>
< * <td>{@link java.util.Queue#poll poll()}</td>
< * <td>{@link #pollFirst pollFirst()}</td>
< * </tr>
< * <tr>
---
> * </tr>
> * <tr>
> * <td>{@link java.util.Queue#offer offer(e)}</td>
> * <td>{@link #offerLast offerLast(e)}</td>
> * </tr>
> * <tr>
94,99c91,96
< * </tr>
< * <tr>
< * <td>{@link java.util.Queue#peek peek()}</td>
< * <td>{@link #peek peekFirst()}</td>
< * </tr>
< * <tr>
---
> * </tr>
> * <tr>
> * <td>{@link java.util.Queue#poll poll()}</td>
> * <td>{@link #pollFirst pollFirst()}</td>
> * </tr>
> * <tr>
102c99,103
< * </tr>
---
> * </tr>
> * <tr>
> * <td>{@link java.util.Queue#peek peek()}</td>
> * <td>{@link #peek peekFirst()}</td>
> * </tr>
107c108
< * When a dequeue is used as a stack, elements are pushed and popped from the
---
> * When a deque is used as a stack, elements are pushed and popped from the
109c110
< * <tt>Deque</tt> methods as indicated in the table below:<p>
---
> * <tt>Deque</tt> methods as indicated in the table below:
110a112
> * <p>
117d118
< * <tr>
120,121c121,122
< * </tr>
< * <tr>
---
> * </tr>
> * <tr>
124,125c125,126
< * </tr>
< * <tr>
---
> * </tr>
> * <tr>
128c129
< * </tr>
---
> * </tr>
135c136
< * <p>This inteface provides two methods to to remove interior
---
> * <p>This interface provides two methods to remove interior
137,139c138,141
< * {@link #removeLastOccurrence removeLastOccurrence}. Unlike the
< * {@link List} interface, this interface does not provide support for
< * indexed access to elements.
---
> * {@link #removeLastOccurrence removeLastOccurrence}.
> *
> * <p>Unlike the {@link List} interface, this interface does not
> * provide support for indexed access to elements.
148c150
< *
---
> *
155c157
< * href="{@docRoot}/../guide/collections/index.html"> Java Collections
---
> * href="{@docRoot}/../technotes/guides/collections/index.html"> Java Collections
162a165
>
165c168,206
< * Inserts the specified element to the front this deque unless it would
---
> * Inserts the specified element at the front of this deque if it is
> * possible to do so immediately without violating capacity restrictions.
> * When using a capacity-restricted deque, it is generally preferable to
> * use method {@link #offerFirst}.
> *
> * @param e the element to add
> * @throws IllegalStateException if the element cannot be added at this
> * time due to capacity restrictions
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
> */
> void addFirst(E e);
>
> /**
> * Inserts the specified element at the end of this deque if it is
> * possible to do so immediately without violating capacity restrictions.
> * When using a capacity-restricted deque, it is generally preferable to
> * use method {@link #offerLast}.
> *
> * <p>This method is equivalent to {@link #add}.
> *
> * @param e the element to add
> * @throws IllegalStateException if the element cannot be added at this
> * time due to capacity restrictions
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
> */
> void addLast(E e);
>
> /**
> * Inserts the specified element at the front of this deque unless it would
167,168c208,209
< * this method is generally preferable to method <tt>addFirst</tt>, which
< * can fail to insert an element only by throwing an exception.
---
> * this method is generally preferable to the {@link #addFirst} method,
> * which can fail to insert an element only by throwing an exception.
170,174c211,219
< * @param e the element to insert
< * @return <tt>true</tt> if it was possible to insert the element,
< * else <tt>false</tt>
< * @throws NullPointerException if <tt>e</tt> is null and this
< * deque does not permit null elements
---
> * @param e the element to add
> * @return <tt>true</tt> if the element was added to this deque, else
> * <tt>false</tt>
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
179c224
< * Inserts the specified element to the end of this deque unless it would
---
> * Inserts the specified element at the end of this deque unless it would
181,182c226,227
< * this method is generally preferable to method <tt>addLast</tt> which
< * can fail to insert an element only by throwing an exception.
---
> * this method is generally preferable to the {@link #addLast} method,
> * which can fail to insert an element only by throwing an exception.
184,188c229,237
< * @param e the element to insert
< * @return <tt>true</tt> if it was possible to insert the element,
< * else <tt>false</tt>
< * @throws NullPointerException if <tt>e</tt> is null and this
< * deque does not permit null elements
---
> * @param e the element to add
> * @return <tt>true</tt> if the element was added to this deque, else
> * <tt>false</tt>
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
193,194c242,244
< * Inserts the specified element to the front of this deque unless it
< * would violate capacity restrictions.
---
> * Retrieves and removes the first element of this deque. This method
> * differs from {@link #pollFirst pollFirst} only in that it throws an
> * exception if this deque is empty.
196,200c246,247
< * @param e the element to insert
< * @throws IllegalStateException if it was not possible to insert
< * the element due to capacity restrictions
< * @throws NullPointerException if <tt>e</tt> is null and this
< * deque does not permit null elements
---
> * @return the head of this deque
> * @throws NoSuchElementException if this deque is empty
202c249
< void addFirst(E e);
---
> E removeFirst();
205,206c252,254
< * Inserts the specified element to the end of this deque unless it would
< * violate capacity restrictions.
---
> * Retrieves and removes the last element of this deque. This method
> * differs from {@link #pollLast pollLast} only in that it throws an
> * exception if this deque is empty.
208,212c256,257
< * @param e the element to insert
< * @throws IllegalStateException if it was not possible to insert
< * the element due to capacity restrictions
< * @throws NullPointerException if <tt>e</tt> is null and this
< * deque does not permit null elements
---
> * @return the tail of this deque
> * @throws NoSuchElementException if this deque is empty
214c259
< void addLast(E e);
---
> E removeLast();
217,218c262,263
< * Retrieves and removes the first element of this deque, or
< * <tt>null</tt> if this deque is empty.
---
> * Retrieves and removes the first element of this deque,
> * or returns <tt>null</tt> if this deque is empty.
220,221c265
< * @return the first element of this deque, or <tt>null</tt> if
< * this deque is empty
---
> * @return the head of this deque, or <tt>null</tt> if this deque is empty
226,227c270,271
< * Retrieves and removes the last element of this deque, or
< * <tt>null</tt> if this deque is empty.
---
> * Retrieves and removes the last element of this deque,
> * or returns <tt>null</tt> if this deque is empty.
229,230c273
< * @return the last element of this deque, or <tt>null</tt> if
< * this deque is empty
---
> * @return the tail of this deque, or <tt>null</tt> if this deque is empty
235,237c278
< * Removes and returns the first element of this deque. This method
< * differs from the <tt>pollFirst</tt> method only in that it throws an
< * exception if this deque is empty.
---
> * Retrieves, but does not remove, the first element of this deque.
239c280,283
< * @return the first element of this deque
---
> * This method differs from {@link #peekFirst peekFirst} only in that it
> * throws an exception if this deque is empty.
> *
> * @return the head of this deque
242c286
< E removeFirst();
---
> E getFirst();
245,247c289,291
< * Retrieves and removes the last element of this deque. This method
< * differs from the <tt>pollLast</tt> method only in that it throws an
< * exception if this deque is empty.
---
> * Retrieves, but does not remove, the last element of this deque.
> * This method differs from {@link #peekLast peekLast} only in that it
> * throws an exception if this deque is empty.
249c293
< * @return the last element of this deque
---
> * @return the tail of this deque
252c296
< E removeLast();
---
> E getLast();
256c300
< * returning <tt>null</tt> if this deque is empty.
---
> * or returns <tt>null</tt> if this deque is empty.
258,259c302
< * @return the first element of this deque, or <tt>null</tt> if
< * this deque is empty
---
> * @return the head of this deque, or <tt>null</tt> if this deque is empty
265c308
< * returning <tt>null</tt> if this deque is empty.
---
> * or returns <tt>null</tt> if this deque is empty.
267,268c310
< * @return the last element of this deque, or <tt>null</tt> if this deque
< * is empty
---
> * @return the tail of this deque, or <tt>null</tt> if this deque is empty
273,278c315,346
< * Retrieves, but does not remove, the first element of this
< * deque. This method differs from the <tt>peek</tt> method only
< * in that it throws an exception if this deque is empty.
< *
< * @return the first element of this deque
< * @throws NoSuchElementException if this deque is empty
---
> * Removes the first occurrence of the specified element from this deque.
> * If the deque does not contain the element, it is unchanged.
> * More formally, removes the first element <tt>e</tt> such that
> * <tt>(o==null ? e==null : o.equals(e))</tt>
> * (if such an element exists).
> * Returns <tt>true</tt> if this deque contained the specified element
> * (or equivalently, if this deque changed as a result of the call).
> *
> * @param o element to be removed from this deque, if present
> * @return <tt>true</tt> if an element was removed as a result of this call
> * @throws ClassCastException if the class of the specified element
> * is incompatible with this deque (optional)
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements (optional)
> */
> boolean removeFirstOccurrence(Object o);
>
> /**
> * Removes the last occurrence of the specified element from this deque.
> * If the deque does not contain the element, it is unchanged.
> * More formally, removes the last element <tt>e</tt> such that
> * <tt>(o==null ? e==null : o.equals(e))</tt>
> * (if such an element exists).
> * Returns <tt>true</tt> if this deque contained the specified element
> * (or equivalently, if this deque changed as a result of the call).
> *
> * @param o element to be removed from this deque, if present
> * @return <tt>true</tt> if an element was removed as a result of this call
> * @throws ClassCastException if the class of the specified element
> * is incompatible with this deque (optional)
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements (optional)
280c348
< E getFirst();
---
> boolean removeLastOccurrence(Object o);
282,290c350
< /**
< * Retrieves, but does not remove, the last element of this
< * deque. This method differs from the <tt>peek</tt> method only
< * in that it throws an exception if this deque is empty.
< *
< * @return the last element of this deque
< * @throws NoSuchElementException if this deque is empty
< */
< E getLast();
---
> // *** Queue methods ***
293,314c353,372
< * Removes the first occurrence of the specified element in this
< * deque. If the deque does not contain the element, it is
< * unchanged. More formally, removes the first element <tt>e</tt>
< * such that <tt>(o==null ? e==null : o.equals(e))</tt> (if
< * such an element exists).
< *
< * @param e element to be removed from this deque, if present
< * @return <tt>true</tt> if the deque contained the specified element
< * @throws NullPointerException if the specified element is <tt>null</tt>
< */
< boolean removeFirstOccurrence(Object e);
<
< /**
< * Removes the last occurrence of the specified element in this
< * deque. If the deque does not contain the element, it is
< * unchanged. More formally, removes the last element <tt>e</tt>
< * such that <tt>(o==null ? e==null : o.equals(e))</tt> (if
< * such an element exists).
< *
< * @param e element to be removed from this deque, if present
< * @return <tt>true</tt> if the deque contained the specified element
< * @throws NullPointerException if the specified element is <tt>null</tt>
---
> * Inserts the specified element into the queue represented by this deque
> * (in other words, at the tail of this deque) if it is possible to do so
> * immediately without violating capacity restrictions, returning
> * <tt>true</tt> upon success and throwing an
> * <tt>IllegalStateException</tt> if no space is currently available.
> * When using a capacity-restricted deque, it is generally preferable to
> * use {@link #offer(Object) offer}.
> *
> * <p>This method is equivalent to {@link #addLast}.
> *
> * @param e the element to add
> * @return <tt>true</tt> (as specified by {@link Collection#add})
> * @throws IllegalStateException if the element cannot be added at this
> * time due to capacity restrictions
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
316,319c374
< boolean removeLastOccurrence(Object e);
<
<
< // *** Queue methods ***
---
> boolean add(E e);
323,327c378,383
< * unless it would violate capacity restrictions. In other words, inserts
< * the specified element to the end of this deque. When using a
< * capacity-restricted deque, this method is generally preferable to the
< * {@link #add} method, which can fail to insert an element only by
< * throwing an exception.
---
> * (in other words, at the tail of this deque) if it is possible to do so
> * immediately without violating capacity restrictions, returning
> * <tt>true</tt> upon success and <tt>false</tt> if no space is currently
> * available. When using a capacity-restricted deque, this method is
> * generally preferable to the {@link #add} method, which can fail to
> * insert an element only by throwing an exception.
331,335c387,395
< * @param e the element to insert
< * @return <tt>true</tt> if it was possible to insert the element,
< * else <tt>false</tt>
< * @throws NullPointerException if <tt>e</tt> is null and this
< * deque does not permit null elements
---
> * @param e the element to add
> * @return <tt>true</tt> if the element was added to this deque, else
> * <tt>false</tt>
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
340,342c400,403
< * Inserts the specified element into the queue represented by this
< * deque unless it would violate capacity restrictions. In other words,
< * inserts the specified element as the last element of this deque.
---
> * Retrieves and removes the head of the queue represented by this deque
> * (in other words, the first element of this deque).
> * This method differs from {@link #poll poll} only in that it throws an
> * exception if this deque is empty.
344c405
< * <p>This method is equivalent to {@link #addLast}.
---
> * <p>This method is equivalent to {@link #removeFirst()}.
346,351c407,408
< * @param e the element to insert
< * @return <tt>true</tt> (as per the spec for {@link Collection#add})
< * @throws IllegalStateException if it was not possible to insert
< * the element due to capacity restrictions
< * @throws NullPointerException if <tt>e</tt> is null and this
< * deque does not permit null elements
---
> * @return the head of the queue represented by this deque
> * @throws NoSuchElementException if this deque is empty
353c410
< boolean add(E e);
---
> E remove();
356,359c413,415
< * Retrieves and removes the head of the queue represented by
< * this deque, or <tt>null</tt> if this deque is empty. In other words,
< * retrieves and removes the first element of this deque, or <tt>null</tt>
< * if this deque is empty.
---
> * Retrieves and removes the head of the queue represented by this deque
> * (in other words, the first element of this deque), or returns
> * <tt>null</tt> if this deque is empty.
364c420
< * this deque is empty
---
> * this deque is empty
369,371c425,428
< * Retrieves and removes the head of the queue represented by this deque.
< * This method differs from the <tt>poll</tt> method only in that it
< * throws an exception if this deque is empty.
---
> * Retrieves, but does not remove, the head of the queue represented by
> * this deque (in other words, the first element of this deque).
> * This method differs from {@link #peek peek} only in that it throws an
> * exception if this deque is empty.
373c430
< * <p>This method is equivalent to {@link #removeFirst()}.
---
> * <p>This method is equivalent to {@link #getFirst()}.
378c435
< E remove();
---
> E element();
382c439,440
< * this deque, returning <tt>null</tt> if this deque is empty.
---
> * this deque (in other words, the first element of this deque), or
> * returns <tt>null</tt> if this deque is empty.
384c442
< * <p>This method is equivalent to {@link #peekFirst()}
---
> * <p>This method is equivalent to {@link #peekFirst()}.
387c445
< * <tt>null</tt> if this deque is empty
---
> * <tt>null</tt> if this deque is empty
391,402d448
< /**
< * Retrieves, but does not remove, the head of the queue represented by
< * this deque. This method differs from the <tt>peek</tt> method only in
< * that it throws an exception if this deque is empty.
< *
< * <p>This method is equivalent to {@link #getFirst()}
< *
< * @return the head of the queue represented by this deque
< * @throws NoSuchElementException if this deque is empty
< */
< E element();
<
407,409c453,457
< * Pushes an element onto the stack represented by this deque. In other
< * words, inserts the element to the front this deque unless it would
< * violate capacity restrictions.
---
> * Pushes an element onto the stack represented by this deque (in other
> * words, at the head of this deque) if it is possible to do so
> * immediately without violating capacity restrictions, returning
> * <tt>true</tt> upon success and throwing an
> * <tt>IllegalStateException</tt> if no space is currently available.
413,416c461,469
< * @throws IllegalStateException if it was not possible to insert
< * the element due to capacity restrictions
< * @throws NullPointerException if <tt>e</tt> is null and this
< * deque does not permit null elements
---
> * @param e the element to push
> * @throws IllegalStateException if the element cannot be added at this
> * time due to capacity restrictions
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
422c475
< * words, removes and returns the the first element of this deque.
---
> * words, removes and returns the first element of this deque.
427c480
< * of the stack represented by this deque)
---
> * of the stack represented by this deque)
433c486,528
< // *** Collection Method ***
---
> // *** Collection methods ***
>
> /**
> * Removes the first occurrence of the specified element from this deque.
> * If the deque does not contain the element, it is unchanged.
> * More formally, removes the first element <tt>e</tt> such that
> * <tt>(o==null ? e==null : o.equals(e))</tt>
> * (if such an element exists).
> * Returns <tt>true</tt> if this deque contained the specified element
> * (or equivalently, if this deque changed as a result of the call).
> *
> * <p>This method is equivalent to {@link #removeFirstOccurrence}.
> *
> * @param o element to be removed from this deque, if present
> * @return <tt>true</tt> if an element was removed as a result of this call
> * @throws ClassCastException if the class of the specified element
> * is incompatible with this deque (optional)
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements (optional)
> */
> boolean remove(Object o);
>
> /**
> * Returns <tt>true</tt> if this deque contains the specified element.
> * More formally, returns <tt>true</tt> if and only if this deque contains
> * at least one element <tt>e</tt> such that
> * <tt>(o==null ? e==null : o.equals(e))</tt>.
> *
> * @param o element whose presence in this deque is to be tested
> * @return <tt>true</tt> if this deque contains the specified element
> * @throws ClassCastException if the type of the specified element
> * is incompatible with this deque (optional)
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements (optional)
> */
> boolean contains(Object o);
>
> /**
> * Returns the number of elements in this deque.
> *
> * @return the number of elements in this deque
> */
> public int size();
436,439c531,534
< * Returns an iterator over the elements in this deque. The elements
< * will be ordered from first (head) to last (tail).
< *
< * @return an <tt>Iterator</tt> over the elements in this deque
---
> * Returns an iterator over the elements in this deque in proper sequence.
> * The elements will be returned in order from first (head) to last (tail).
> *
> * @return an iterator over the elements in this deque in proper sequence
441a537,547
>
> /**
> * Returns an iterator over the elements in this deque in reverse
> * sequential order. The elements will be returned in order from
> * last (tail) to first (head).
> *
> * @return an iterator over the elements in this deque in reverse
> * sequence
> */
> Iterator<E> descendingIterator();
>
diff -r lea/LinkedBlockingDeque.java java6/LinkedBlockingDeque.java
2,4c2,5
< * Written by Doug Lea with assistance from members of JCP JSR-166
< * Expert Group and released to the public domain, as explained at
< * http://creativecommons.org/licenses/publicdomain
---
> * @(#)LinkedBlockingDeque.java 1.4 06/04/21
> *
> * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
> * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
7,8c8
< package org.jboss.messaging.utils.concurrent;
<
---
> package java.util.concurrent;
10d9
< import java.util.concurrent.*;
27c26
< * contains }, {@link #iterator iterator.remove()}, and the bulk
---
> * contains}, {@link #iterator iterator.remove()}, and the bulk
32,34c31,35
< * Iterator} interfaces. This class is a member of the <a
< * href="{@docRoot}/../guide/collections/index.html"> Java Collections
< * Framework</a>.
---
> * Iterator} interfaces.
> *
> * <p>This class is a member of the
> * <a href="{@docRoot}/../technotes/guides/collections/index.html">
> * Java Collections Framework</a>.
48a50,56
> /*
> * We have "diamond" multiple interface/abstract class inheritance
> * here, and that introduces ambiguities. Often we want the
> * BlockingDeque javadoc combined with the AbstractQueue
> * implementation, so a lot of method specs are duplicated here.
> */
>
53c61
< E item;
---
> E item;
87,88c95,96
< * Creates a <tt>LinkedBlockingDeque</tt> with the given (fixed)
< * capacity.
---
> * Creates a <tt>LinkedBlockingDeque</tt> with the given (fixed) capacity.
> *
99,101c107,110
< * {@link Integer#MAX_VALUE}, initially containing the elements of the
< * given collection,
< * added in traversal order of the collection's iterator.
---
> * {@link Integer#MAX_VALUE}, initially containing the elements of
> * the given collection, added in traversal order of the
> * collection's iterator.
> *
103,104c112,113
< * @throws NullPointerException if <tt>c</tt> or any element within it
< * is <tt>null</tt>
---
> * @throws NullPointerException if the specified collection or any
> * of its elements are null
116c125
< * Link e as first element, or return false if full
---
> * Links e as first element, or returns false if full.
134c143
< * Link e as last element, or return false if full
---
> * Links e as last element, or returns false if full.
152c161
< * Remove and return first element, or null if empty
---
> * Removes and returns first element, or null if empty.
160c169
< if (n == null)
---
> if (n == null)
162c171
< else
---
> else
170c179
< * Remove and return last element, or null if empty
---
> * Removes and returns last element, or null if empty.
178c187
< if (p == null)
---
> if (p == null)
180c189
< else
---
> else
194c203
< if (n == null)
---
> if (n == null)
211c220
< // Deque methods
---
> // BlockingDeque methods
213,214c222,244
< public boolean offerFirst(E o) {
< if (o == null) throw new NullPointerException();
---
> /**
> * @throws IllegalStateException {@inheritDoc}
> * @throws NullPointerException {@inheritDoc}
> */
> public void addFirst(E e) {
> if (!offerFirst(e))
> throw new IllegalStateException("Deque full");
> }
>
> /**
> * @throws IllegalStateException {@inheritDoc}
> * @throws NullPointerException {@inheritDoc}
> */
> public void addLast(E e) {
> if (!offerLast(e))
> throw new IllegalStateException("Deque full");
> }
>
> /**
> * @throws NullPointerException {@inheritDoc}
> */
> public boolean of