Class Overview
A blocking queue in which each insert
 operation must wait for a corresponding remove operation by another
 thread, and vice versa.  A synchronous queue does not have any
 internal capacity, not even a capacity of one.  You cannot
 peek at a synchronous queue because an element is only
 present when you try to remove it; you cannot insert an element
 (using any method) unless another thread is trying to remove it;
 you cannot iterate as there is nothing to iterate.  The
 head of the queue is the element that the first queued
 inserting thread is trying to add to the queue; if there is no such
 queued thread then no element is available for removal and
 poll() will return null.  For purposes of other
 Collection methods (for example contains), a
 SynchronousQueue acts as an empty collection.  This queue
 does not permit null elements.
 
Synchronous queues are similar to rendezvous channels used in
 CSP and Ada. They are well suited for handoff designs, in which an
 object running in one thread must sync up with an object running
 in another thread in order to hand it some information, event, or
 task.
 
 This class supports an optional fairness policy for ordering
 waiting producer and consumer threads.  By default, this ordering
 is not guaranteed. However, a queue constructed with fairness set
 to true grants threads access in FIFO order.
 
This class and its iterator implement all of the
 optional methods of the Collection and Iterator interfaces.
 
Summary
| Public Constructors | 
	 
    
        | 
            
            
            
            
            
            
         | 
        
        SynchronousQueue()
        
         Creates a SynchronousQueue with nonfair access policy. 
  
   | 
	 
    
        | 
            
            
            
            
            
            
         | 
        
        SynchronousQueue(boolean fair)
        
         Creates a SynchronousQueue with the specified fairness policy. 
  
   | 
| Public Methods | 
	 
    
        | 
            
            
            
            
            
            void
         | 
        
        clear()
        
         Does nothing. 
  
   | 
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        contains(Object o)
        
         Always returns false. 
  
   | 
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        containsAll(Collection<?> c)
        
         Returns false unless the given collection is empty. 
  
   | 
	 
    
        | 
            
            
            
            
            
            int
         | 
        
        drainTo(Collection<? super E> c, int maxElements)
        
         Removes at most the given number of available elements from
 this queue and adds them to the given collection. 
  
   | 
	 
    
        | 
            
            
            
            
            
            int
         | 
        
        drainTo(Collection<? super E> c)
        
         Removes all available elements from this queue and adds them
 to the given collection. 
  
   | 
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        isEmpty()
        
         Always returns true. 
  
   | 
	 
    
        | 
            
            
            
            
            
            Iterator<E>
         | 
        
        iterator()
        
         Returns an empty iterator in which hasNext always returns
 false. 
  
   | 
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        offer(E e)
        
         Inserts the specified element into this queue, if another thread is
 waiting to receive it. 
  
   | 
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        offer(E o, long timeout, TimeUnit unit)
        
         Inserts the specified element into this queue, waiting if necessary
 up to the specified wait time for another thread to receive it. 
  
   | 
	 
    
        | 
            
            
            
            
            
            E
         | 
        
        peek()
        
         Always returns null. 
  
   | 
	 
    
        | 
            
            
            
            
            
            E
         | 
        
        poll()
        
         Retrieves and removes the head of this queue, if another thread
 is currently making an element available. 
  
   | 
	 
    
        | 
            
            
            
            
            
            E
         | 
        
        poll(long timeout, TimeUnit unit)
        
         Retrieves and removes the head of this queue, waiting
 if necessary up to the specified wait time, for another thread
 to insert it. 
  
   | 
	 
    
        | 
            
            
            
            
            
            void
         | 
        
        put(E o)
        
         Adds the specified element to this queue, waiting if necessary for
 another thread to receive it. 
  
   | 
	 
    
        | 
            
            
            
            
            
            int
         | 
        
        remainingCapacity()
        
         Always returns zero. 
  
   | 
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        remove(Object o)
        
         Always returns false. 
  
   | 
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        removeAll(Collection<?> c)
        
         Always returns false. 
  
   | 
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        retainAll(Collection<?> c)
        
         Always returns false. 
  
   | 
	 
    
        | 
            
            
            
            
            
            int
         | 
        
        size()
        
         Always returns zero. 
  
   | 
	 
    
        | 
            
            
            
            
            
            E
         | 
        
        take()
        
         Retrieves and removes the head of this queue, waiting if necessary
 for another thread to insert it. 
  
   | 
	 
    
        | 
            
            
            
            
            <T>
            T[]
         | 
        
        toArray(T[] a)
        
         Sets the zeroeth element of the specified array to null
 (if the array has non-zero length) and returns it. 
  
   | 
	 
    
        | 
            
            
            
            
            
            Object[]
         | 
        
        toArray()
        
         Returns a zero-length array. 
  
   | 
| 
  [Expand]
   Inherited Methods  | 
   
From class java.util.AbstractQueue
  
   
  
    
    
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        add(E o)
        
         Adds an element to the queue. 
  
   |  
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        addAll(Collection<? extends E> c)
        
         Adds all the elements of a collection to the queue. 
  
   |  
	 
    
        | 
            
            
            
            
            
            void
         | 
        
        clear()
        
         Removes all elements of the queue, leaving it empty. 
  
   |  
	 
    
        | 
            
            
            
            
            
            E
         | 
        
        element()
        
         Returns but does not remove the element at the head of the queue. 
  
   |  
	 
    
        | 
            
            
            
            
            
            E
         | 
        
        remove()
        
         Removes the element at the head of the queue and returns it. 
  
   |  
 
   
 
 | 
   
From class java.util.AbstractCollection
  
   
  
    
    
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        add(E object)
        
         Attempts to add object to the contents of this
 Collection (optional). 
  
   |  
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        addAll(Collection<? extends E> collection)
        
         Attempts to add all of the objects contained in collection
 to the contents of this Collection (optional). 
  
   |  
	 
    
        | 
            
            
            
            
            
            void
         | 
        
        clear()
        
         Removes all elements from this Collection, leaving it empty (optional). 
  
   |  
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        contains(Object object)
        
         Tests whether this Collection contains the specified object. 
  
   |  
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        containsAll(Collection<?> collection)
        
         Tests whether this Collection contains all objects contained in the
 specified Collection. 
  
   |  
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        isEmpty()
        
         Returns if this Collection contains no elements. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            Iterator<E>
         | 
        
        iterator()
        
        Returns an instance of  Iterator that may be used to access the
 objects contained by this  Collection.  
  
   |  
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        remove(Object object)
        
         Removes one instance of the specified object from this Collection if one
 is contained (optional). 
  
   |  
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        removeAll(Collection<?> collection)
        
         Removes all occurrences in this Collection of each object in the
 specified Collection (optional). 
  
   |  
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        retainAll(Collection<?> collection)
        
         Removes all objects from this Collection that are not also found in the
 Collection passed (optional). 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            int
         | 
        
        size()
        
         Returns a count of how many objects this Collection contains. 
  
   |  
	 
    
        | 
            
            
            
            
            <T>
            T[]
         | 
        
        toArray(T[] contents)
        
         Returns an array containing all elements contained in this Collection. 
  
   |  
	 
    
        | 
            
            
            
            
            
            Object[]
         | 
        
        toArray()
        
         Returns a new array containing all elements contained in this Collection. 
  
   |  
	 
    
        | 
            
            
            
            
            
            String
         | 
        
        toString()
        
         Returns the string representation of this Collection. 
  
   |  
 
   
 
 | 
   
From class java.lang.Object
  
   
  
    
    
	 
    
        | 
            
            
            
            
            
            Object
         | 
        
        clone()
        
         Creates and returns a copy of this Object. 
  
   |  
	 
    
        | 
            
            
            
            
            
            boolean
         | 
        
        equals(Object o)
        
         Compares this instance with the specified object and indicates if they
 are equal. 
  
   |  
	 
    
        | 
            
            
            
            
            
            void
         | 
        
        finalize()
        
         Called before the object's memory is reclaimed by the VM. 
  
   |  
	 
    
        | 
            
            
            final
            
            
            Class<? extends Object>
         | 
        
        getClass()
        
        Returns the unique instance of  Class that represents this
 object's class.  
  
   |  
	 
    
        | 
            
            
            
            
            
            int
         | 
        
        hashCode()
        
         Returns an integer hash code for this object. 
  
   |  
	 
    
        | 
            
            
            final
            
            
            void
         | 
        
        notify()
        
         Causes a thread which is waiting on this object's monitor (by means of
 calling one of the wait() methods) to be woken up. 
  
   |  
	 
    
        | 
            
            
            final
            
            
            void
         | 
        
        notifyAll()
        
         Causes all threads which are waiting on this object's monitor (by means
 of calling one of the wait() methods) to be woken up. 
  
   |  
	 
    
        | 
            
            
            
            
            
            String
         | 
        
        toString()
        
         Returns a string containing a concise, human-readable description of this
 object. 
  
   |  
	 
    
        | 
            
            
            final
            
            
            void
         | 
        
        wait()
        
         Causes the calling thread to wait until another thread calls the notify() or notifyAll() method of this object. 
  
   |  
	 
    
        | 
            
            
            final
            
            
            void
         | 
        
        wait(long millis, int nanos)
        
         Causes the calling thread to wait until another thread calls the notify() or notifyAll() method of this object or until the
 specified timeout expires. 
  
   |  
	 
    
        | 
            
            
            final
            
            
            void
         | 
        
        wait(long millis)
        
         Causes the calling thread to wait until another thread calls the notify() or notifyAll() method of this object or until the
 specified timeout expires. 
  
   |  
 
   
 
 | 
   
From interface java.lang.Iterable
 | 
   
From interface java.util.Collection
  
   
  
    
    
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        add(E object)
        
         Attempts to add object to the contents of this
 Collection (optional). 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        addAll(Collection<? extends E> collection)
        
         Attempts to add all of the objects contained in Collection
 to the contents of this Collection (optional). 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            void
         | 
        
        clear()
        
         Removes all elements from this Collection, leaving it empty (optional). 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        contains(Object object)
        
         Tests whether this Collection contains the specified object. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        containsAll(Collection<?> collection)
        
         Tests whether this Collection contains all objects contained in the
 specified Collection. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        equals(Object object)
        
         Compares the argument to the receiver, and returns true if they represent
 the same object using a class specific comparison. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            int
         | 
        
        hashCode()
        
         Returns an integer hash code for the receiver. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        isEmpty()
        
         Returns if this Collection contains no elements. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            Iterator<E>
         | 
        
        iterator()
        
        Returns an instance of  Iterator that may be used to access the
 objects contained by this  Collection.  
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        remove(Object object)
        
         Removes one instance of the specified object from this Collection if one
 is contained (optional). 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        removeAll(Collection<?> collection)
        
         Removes all occurrences in this Collection of each object in the
 specified Collection (optional). 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        retainAll(Collection<?> collection)
        
         Removes all objects from this Collection that are not also found in the
 Collection passed (optional). 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            int
         | 
        
        size()
        
         Returns a count of how many objects this Collection contains. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            <T>
            T[]
         | 
        
        toArray(T[] array)
        
         Returns an array containing all elements contained in this Collection. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            Object[]
         | 
        
        toArray()
        
         Returns a new array containing all elements contained in this Collection. 
  
   |  
 
   
 
 | 
   
From interface java.util.Queue
  
   
  
    
    
	 
    
        | 
            abstract
            
            
            
            
            E
         | 
        
        element()
        
         Gets but does not remove the element at the head of the queue. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        offer(E o)
        
         Inserts the specified element into the queue provided that the condition
 allows such an operation. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            E
         | 
        
        peek()
        
         Gets but does not remove the element at the head of the queue. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            E
         | 
        
        poll()
        
         Gets and removes the element at the head of the queue, or returns null if there is no element in the queue. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            E
         | 
        
        remove()
        
         Gets and removes the element at the head of the queue. 
  
   |  
 
   
 
 | 
   
From interface java.util.concurrent.BlockingQueue
  
   
  
    
    
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        add(E e)
        
         Inserts the specified element into this queue if it is possible to do
 so immediately without violating capacity restrictions, returning
 true upon success and throwing an
 IllegalStateException if no space is currently available. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        contains(Object o)
        
         Returns true if this queue contains the specified element. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            int
         | 
        
        drainTo(Collection<? super E> c)
        
         Removes all available elements from this queue and adds them
 to the given collection. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            int
         | 
        
        drainTo(Collection<? super E> c, int maxElements)
        
         Removes at most the given number of available elements from
 this queue and adds them to the given collection. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        offer(E e, long timeout, TimeUnit unit)
        
         Inserts the specified element into this queue, waiting up to the
 specified wait time if necessary for space to become available. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        offer(E e)
        
         Inserts the specified element into this queue if it is possible to do
 so immediately without violating capacity restrictions, returning
 true upon success and false if no space is currently
 available. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            E
         | 
        
        poll(long timeout, TimeUnit unit)
        
         Retrieves and removes the head of this queue, waiting up to the
 specified wait time if necessary for an element to become available. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            void
         | 
        
        put(E e)
        
         Inserts the specified element into this queue, waiting if necessary
 for space to become available. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            int
         | 
        
        remainingCapacity()
        
         Returns the number of additional elements that this queue can ideally
 (in the absence of memory or resource constraints) accept without
 blocking, or Integer.MAX_VALUE if there is no intrinsic
 limit. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            boolean
         | 
        
        remove(Object o)
        
         Removes a single instance of the specified element from this queue,
 if it is present. 
  
   |  
	 
    
        | 
            abstract
            
            
            
            
            E
         | 
        
        take()
        
         Retrieves and removes the head of this queue, waiting if necessary
 until an element becomes available. 
  
   |  
 
   
 
 | 
 
Public Constructors
 
    
      
        public 
         
         
         
         
        
      
      SynchronousQueue
      ()
    
      
    
      
  Creates a SynchronousQueue with nonfair access policy.
 
     
 
 
    
      
        public 
         
         
         
         
        
      
      SynchronousQueue
      (boolean fair)
    
      
    
      
  Creates a SynchronousQueue with the specified fairness policy.
 
  
      Parameters
      
        
          | fair
           | if true, waiting threads contend in FIFO order for
        access; otherwise the order is unspecified.
 | 
        
      
   
     
 
Public Methods
 
    
      
        public 
         
         
         
         
        void
      
      clear
      ()
    
      
    
      
  Does nothing.
 A SynchronousQueue has no internal capacity.
 
     
 
 
    
      
        public 
         
         
         
         
        boolean
      
      contains
      (Object o)
    
      
    
      
  Always returns false.
 A SynchronousQueue has no internal capacity.
 
  
  
     
 
 
    
      
        public 
         
         
         
         
        boolean
      
      containsAll
      (Collection<?> c)
    
      
    
      
  Returns false unless the given collection is empty.
 A SynchronousQueue has no internal capacity.
 
  
  
      Returns
      - false unless given collection is empty
 
   
     
 
 
    
      
        public 
         
         
         
         
        int
      
      drainTo
      (Collection<? super E> c, int maxElements)
    
      
    
      
  Removes at most the given number of available elements from
 this queue and adds them to the given collection.  A failure
 encountered while attempting to add elements to
 collection c may result in elements being in neither,
 either or both collections when the associated exception is
 thrown.  Attempts to drain a queue to itself result in
 IllegalArgumentException. Further, the behavior of
 this operation is undefined if the specified collection is
 modified while the operation is in progress.
 
  
      Parameters
      
        
          | c
           | the collection to transfer elements into | 
        
        
          | maxElements
           | the maximum number of elements to transfer | 
        
      
   
  
      Returns
      - the number of elements transferred
 
   
  
     
 
 
    
      
        public 
         
         
         
         
        int
      
      drainTo
      (Collection<? super E> c)
    
      
    
      
  Removes all available elements from this queue and adds them
 to the given collection.  This operation may be more
 efficient than repeatedly polling this queue.  A failure
 encountered while attempting to add elements to
 collection c may result in elements being in neither,
 either or both collections when the associated exception is
 thrown.  Attempts to drain a queue to itself result in
 IllegalArgumentException. Further, the behavior of
 this operation is undefined if the specified collection is
 modified while the operation is in progress.
 
  
      Parameters
      
        
          | c
           | the collection to transfer elements into | 
        
      
   
  
      Returns
      - the number of elements transferred
 
   
  
     
 
 
    
      
        public 
         
         
         
         
        boolean
      
      isEmpty
      ()
    
      
    
      
  Always returns true.
 A SynchronousQueue has no internal capacity.
 
  
     
 
 
    
      
        public 
         
         
         
         
        Iterator<E>
      
      iterator
      ()
    
      
    
      
  Returns an empty iterator in which hasNext always returns
 false.
 
  
     
 
 
    
      
        public 
         
         
         
         
        boolean
      
      offer
      (E e)
    
      
    
      
  Inserts the specified element into this queue, if another thread is
 waiting to receive it.
 
  
  
      Returns
      - true if the element was added to this queue, else
         false
 
   
  
     
 
 
    
      
        public 
         
         
         
         
        boolean
      
      offer
      (E o, long timeout, TimeUnit unit)
    
      
    
      
  Inserts the specified element into this queue, waiting if necessary
 up to the specified wait time for another thread to receive it.
 
  
      Parameters
      
        
          | o
           | the element to add | 
        
        
          | timeout
           | how long to wait before giving up, in units of
        unit | 
        
        
          | unit
           | a TimeUnit determining how to interpret the
        timeout parameter | 
        
      
   
  
      Returns
      - true if successful, or false if the
         specified waiting time elapses before a consumer appears.
 
   
  
     
 
 
    
      
        public 
         
         
         
         
        E
      
      peek
      ()
    
      
    
      
  Always returns null.
 A SynchronousQueue does not return elements
 unless actively waited on.
 
  
     
 
 
    
      
        public 
         
         
         
         
        E
      
      poll
      ()
    
      
    
      
  Retrieves and removes the head of this queue, if another thread
 is currently making an element available.
 
  
      Returns
      - the head of this queue, or null if no
         element is available.
 
   
     
 
 
    
      
        public 
         
         
         
         
        E
      
      poll
      (long timeout, TimeUnit unit)
    
      
    
      
  Retrieves and removes the head of this queue, waiting
 if necessary up to the specified wait time, for another thread
 to insert it.
 
  
      Parameters
      
        
          | timeout
           | how long to wait before giving up, in units of
        unit | 
        
        
          | unit
           | a TimeUnit determining how to interpret the
        timeout parameter | 
        
      
   
  
      Returns
      - the head of this queue, or null if the
         specified waiting time elapses before an element is present.
 
   
  
     
 
 
    
      
        public 
         
         
         
         
        void
      
      put
      (E o)
    
      
    
      
  Adds the specified element to this queue, waiting if necessary for
 another thread to receive it.
 
  
  
     
 
 
    
      
        public 
         
         
         
         
        int
      
      remainingCapacity
      ()
    
      
    
      
  Always returns zero.
 A SynchronousQueue has no internal capacity.
 
  
     
 
 
    
      
        public 
         
         
         
         
        boolean
      
      remove
      (Object o)
    
      
    
      
  Always returns false.
 A SynchronousQueue has no internal capacity.
 
  
  
     
 
 
    
      
        public 
         
         
         
         
        boolean
      
      removeAll
      (Collection<?> c)
    
      
    
      
  Always returns false.
 A SynchronousQueue has no internal capacity.
 
  
  
     
 
 
    
      
        public 
         
         
         
         
        boolean
      
      retainAll
      (Collection<?> c)
    
      
    
      
  Always returns false.
 A SynchronousQueue has no internal capacity.
 
  
  
     
 
 
    
      
        public 
         
         
         
         
        int
      
      size
      ()
    
      
    
      
  Always returns zero.
 A SynchronousQueue has no internal capacity.
 
  
     
 
 
    
      
        public 
         
         
         
         
        E
      
      take
      ()
    
      
    
      
  Retrieves and removes the head of this queue, waiting if necessary
 for another thread to insert it.
 
  
  
     
 
 
    
      
        public 
         
         
         
         
        T[]
      
      toArray
      (T[] a)
    
      
    
      
  Sets the zeroeth element of the specified array to null
 (if the array has non-zero length) and returns it.
 
  
  
  
     
 
 
    
      
        public 
         
         
         
         
        Object[]
      
      toArray
      ()
    
      
    
      
  Returns a zero-length array.