com.google.common.util.concurrent

## Class ForwardingBlockingQueue<E>

- java.lang.Object
- - com.google.common.collect.ForwardingObject
  - - com.google.common.collect.ForwardingCollection<E>
    - - com.google.common.collect.ForwardingQueue<E>
      - - com.google.common.util.concurrent.ForwardingBlockingQueue<E>

- Type Parameters:
    `E` - the type of elements held in this collection
  All Implemented Interfaces:
    java.lang.Iterable<E>, java.util.Collection<E>, java.util.concurrent.BlockingQueue<E>, java.util.Queue<E>

      public abstract class ForwardingBlockingQueue<E>
      extends ForwardingQueue<E>
      implements java.util.concurrent.BlockingQueue<E>

  A `BlockingQueue` which forwards all its method calls to another `BlockingQueue`. Subclasses should override one or more methods to modify the behavior of the backing collection as desired per the decorator pattern.
  Since:
    4.0

- - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `ForwardingBlockingQueue()` Constructor for use by subclasses.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract java.util.concurrent.BlockingQueue<E>` | `delegate()` Returns the backing delegate instance that methods are forwarded to.
    `int` | `drainTo(java.util.Collection<? super E> c)`
    `int` | `drainTo(java.util.Collection<? super E> c, int maxElements)`
    `boolean` | `offer(E e, long timeout, java.util.concurrent.TimeUnit unit)`
    `E` | `poll(long timeout, java.util.concurrent.TimeUnit unit)`
    `void` | `put(E e)`
    `int` | `remainingCapacity()`
    `E` | `take()`

    - ### Methods inherited from class com.google.common.collect.ForwardingQueue

      `element, offer, peek, poll, remove, standardOffer, standardPeek, standardPoll`

    - ### Methods inherited from class com.google.common.collect.ForwardingCollection

      `add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, removeAll, retainAll, size, standardAddAll, standardClear, standardContains, standardContainsAll, standardIsEmpty, standardRemove, standardRemoveAll, standardRetainAll, standardToArray, standardToArray, standardToString, toArray, toArray`

    - ### Methods inherited from class com.google.common.collect.ForwardingObject

      `toString`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.util.concurrent.BlockingQueue

      `add, contains, offer, remove`

    - ### Methods inherited from interface java.util.Queue

      `element, peek, poll, remove`

    - ### Methods inherited from interface java.util.Collection

      `addAll, clear, containsAll, equals, hashCode, isEmpty, iterator, removeAll, retainAll, size, toArray, toArray`

- - ### Constructor Detail

    - #### ForwardingBlockingQueue

          protected ForwardingBlockingQueue()

      Constructor for use by subclasses.

  - ### Method Detail

    - #### delegate

          protected abstract java.util.concurrent.BlockingQueue<E> delegate()

      Description copied from class: `ForwardingObject`
      Returns the backing delegate instance that methods are forwarded to. Abstract subclasses generally override this method with an abstract method that has a more specific return type, such as `ForwardingSet.delegate()`. Concrete subclasses override this method to supply the instance being decorated.
      Specified by:
        `delegate` in class `ForwardingQueue<E>`

    - #### drainTo

          public int drainTo(java.util.Collection<? super E> c,
                    int maxElements)

      Specified by:
        `drainTo` in interface `java.util.concurrent.BlockingQueue<E>`

    - #### drainTo

          public int drainTo(java.util.Collection<? super E> c)

      Specified by:
        `drainTo` in interface `java.util.concurrent.BlockingQueue<E>`

    - #### offer

          public boolean offer(E e,
                      long timeout,
                      java.util.concurrent.TimeUnit unit)
                        throws java.lang.InterruptedException

      Specified by:
        `offer` in interface `java.util.concurrent.BlockingQueue<E>`
      Throws:
        `java.lang.InterruptedException`

    - #### poll

          public E poll(long timeout,
               java.util.concurrent.TimeUnit unit)
                 throws java.lang.InterruptedException

      Specified by:
        `poll` in interface `java.util.concurrent.BlockingQueue<E>`
      Throws:
        `java.lang.InterruptedException`

    - #### put

          public void put(E e)
                   throws java.lang.InterruptedException

      Specified by:
        `put` in interface `java.util.concurrent.BlockingQueue<E>`
      Throws:
        `java.lang.InterruptedException`

    - #### remainingCapacity

          public int remainingCapacity()

      Specified by:
        `remainingCapacity` in interface `java.util.concurrent.BlockingQueue<E>`

    - #### take

          public E take()
                 throws java.lang.InterruptedException

      Specified by:
        `take` in interface `java.util.concurrent.BlockingQueue<E>`
      Throws:
        `java.lang.InterruptedException`