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.
This class is a member of the
Java Collections Framework.
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 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.
|
boolean
|
addAll(Collection<? extends E> c)
Adds all of the elements in the specified collection to this
queue.
|
void
|
clear()
Removes all of the elements from this queue.
|
E
|
element()
Retrieves, but does not remove, the head of this queue.
|
E
|
remove()
Retrieves and removes the head of this queue.
|
|
From class
java.util.AbstractCollection
boolean
|
add(E e)
Ensures that this collection contains the specified element (optional
operation).
This implementation always throws an
UnsupportedOperationException.
|
boolean
|
addAll(Collection<? extends E> c)
Adds all of the elements in the specified collection to this collection
(optional operation).
This implementation iterates over the specified collection, and adds
each object returned by the iterator to this collection, in turn.
|
void
|
clear()
Removes all of the elements from this collection (optional operation).
This implementation iterates over this collection, removing each
element using the Iterator.remove operation.
|
boolean
|
contains(Object o)
Returns true if this collection contains the specified element.
This implementation iterates over the elements in the collection,
checking each element in turn for equality with the specified element.
|
boolean
|
containsAll(Collection<?> c)
Returns true if this collection contains all of the elements
in the specified collection.
This implementation iterates over the specified collection,
checking each element returned by the iterator in turn to see
if it's contained in this collection.
|
boolean
|
isEmpty()
Returns true if this collection contains no elements.
This implementation returns size() == 0.
|
abstract
Iterator<E>
|
iterator()
Returns an iterator over the elements contained in this collection.
|
boolean
|
remove(Object o)
Removes a single instance of the specified element from this
collection, if it is present (optional operation).
This implementation iterates over the collection looking for the
specified element.
|
boolean
|
removeAll(Collection<?> c)
Removes all of this collection's elements that are also contained in the
specified collection (optional operation).
This implementation iterates over this collection, checking each
element returned by the iterator in turn to see if it's contained
in the specified collection.
|
boolean
|
retainAll(Collection<?> c)
Retains only the elements in this collection that are contained in the
specified collection (optional operation).
This implementation iterates over this collection, checking each
element returned by the iterator in turn to see if it's contained
in the specified collection.
|
abstract
int
|
size()
Returns the number of elements in this collection.
|
<T>
T[]
|
toArray(T[] a)
Returns an array containing all of the elements in this collection;
the runtime type of the returned array is that of the specified array.
This implementation returns an array containing all the elements
returned by this collection's iterator in the same order, stored in
consecutive elements of the array, starting with index 0 .
|
Object[]
|
toArray()
Returns an array containing all of the elements in this collection.
This implementation returns an array containing all the elements
returned by this collection's iterator, in the same order, stored in
consecutive elements of the array, starting with index 0 .
|
String
|
toString()
Returns a string representation of this collection.
|
|
From class
java.lang.Object
Object
|
clone()
Creates and returns a copy of this object.
|
boolean
|
equals(Object obj)
Indicates whether some other object is "equal to" this one.
|
void
|
finalize()
Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object.
|
final
Class<?>
|
getClass()
Returns the runtime class of this Object .
|
int
|
hashCode()
Returns a hash code value for the object.
|
final
void
|
notify()
Wakes up a single thread that is waiting on this object's
monitor.
|
final
void
|
notifyAll()
Wakes up all threads that are waiting on this object's monitor.
|
String
|
toString()
Returns a string representation of the object.
|
final
void
|
wait()
Causes the current thread to wait until another thread invokes the
notify() method or the
notifyAll() method for this object.
|
final
void
|
wait(long timeout, int nanos)
Causes the current thread to wait until another thread invokes the
notify() method or the
notifyAll() method for this object, or
some other thread interrupts the current thread, or a certain
amount of real time has elapsed.
|
final
void
|
wait(long timeout)
Causes the current thread to wait until either another thread invokes the
notify() method or the
notifyAll() method for this object, or a
specified amount of time has elapsed.
|
|
From interface
java.lang.Iterable
abstract
Iterator<T>
|
iterator()
Returns an iterator over a set of elements of type T.
|
|
From interface
java.util.Collection
abstract
boolean
|
add(E e)
Ensures that this collection contains the specified element (optional
operation).
|
abstract
boolean
|
addAll(Collection<? extends E> c)
Adds all of the elements in the specified collection to this collection
(optional operation).
|
abstract
void
|
clear()
Removes all of the elements from this collection (optional operation).
|
abstract
boolean
|
contains(Object o)
Returns true if this collection contains the specified element.
|
abstract
boolean
|
containsAll(Collection<?> c)
Returns true if this collection contains all of the elements
in the specified collection.
|
abstract
boolean
|
equals(Object o)
Compares the specified object with this collection for equality.
|
abstract
int
|
hashCode()
Returns the hash code value for this collection.
|
abstract
boolean
|
isEmpty()
Returns true if this collection contains no elements.
|
abstract
Iterator<E>
|
iterator()
Returns an iterator over the elements in this collection.
|
abstract
boolean
|
remove(Object o)
Removes a single instance of the specified element from this
collection, if it is present (optional operation).
|
abstract
boolean
|
removeAll(Collection<?> c)
Removes all of this collection's elements that are also contained in the
specified collection (optional operation).
|
abstract
boolean
|
retainAll(Collection<?> c)
Retains only the elements in this collection that are contained in the
specified collection (optional operation).
|
abstract
int
|
size()
Returns the number of elements in this collection.
|
abstract
<T>
T[]
|
toArray(T[] a)
Returns an array containing all of the elements in this collection;
the runtime type of the returned array is that of the specified array.
|
abstract
Object[]
|
toArray()
Returns an array containing all of the elements in this collection.
|
|
From interface
java.util.Queue
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
E
|
element()
Retrieves, but does not remove, the head of this queue.
|
abstract
boolean
|
offer(E e)
Inserts the specified element into this queue if it is possible to do
so immediately without violating capacity restrictions.
|
abstract
E
|
peek()
Retrieves, but does not remove, the head of this queue,
or returns null if this queue is empty.
|
abstract
E
|
poll()
Retrieves and removes the head of this queue,
or returns null if this queue is empty.
|
abstract
E
|
remove()
Retrieves and removes the head of this 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.