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