# Class ReferenceQueue<T>

java.lang.Object
java.lang.ref.ReferenceQueue<T>

Type Parameters:
  `T` - the type of the reference object

public class ReferenceQueue<T> extends Object
Reference queues, to which registered reference objects are appended by the garbage collector after the appropriate reachability changes are detected.

Memory consistency effects: The enqueueing of a reference to a queue (by the garbage collector, or by a successful call to `Reference.enqueue()`) happens-before the reference is removed from the queue by `poll()` or `remove(long)`.

Since:
  1.2

## Constructor Summary

Constructors
Constructor
Description
`ReferenceQueue()`
Constructs a new reference-object queue.

## Method Summary

Modifier and Type
Method
Description
`Reference<? extends T>`
`poll()`
Polls this queue to see if a reference object is available.
`Reference<? extends T>`
`remove()`
Removes the next reference object in this queue, blocking until one becomes available.
`Reference<? extends T>`
`remove(long timeout)`
Removes the next reference object in this queue, blocking until either one becomes available or the given timeout period expires.

### Methods declared in class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
Modifier and Type
Method
Description
`protected Object`
`clone()`
Creates and returns a copy of this object.
`boolean`
`equals(Object obj)`
Indicates whether some other object is "equal to" this one.
`protected void`
`finalize()`
Deprecated, for removal: This API element is subject to removal in a future version.
Finalization is deprecated and subject to removal in a future release.
`final Class<?>`
`getClass()`
Returns the runtime class of this `Object`.
`int`
`hashCode()`
Returns a hash code value for this 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 it is awakened, typically by being notified or interrupted.
`final void`
`wait(long timeoutMillis)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
`final void`
`wait(long timeoutMillis, int nanos)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

## Constructor Details

### ReferenceQueue

public ReferenceQueue()
Constructs a new reference-object queue.

## Method Details

### poll

public Reference<? extends T> poll()
Polls this queue to see if a reference object is available. If one is available without further delay then it is removed from the queue and returned. Otherwise this method immediately returns `null`.

Returns:
  A reference object, if one was immediately available, otherwise `null`
See Also:
  - `Reference.enqueue()`

### remove

public Reference<? extends T> remove(long timeout) throws InterruptedException
Removes the next reference object in this queue, blocking until either one becomes available or the given timeout period expires.

This method does not offer real-time guarantees: It schedules the timeout as if by invoking the `Object.wait(long)` method.

Parameters:
  `timeout` - If positive, block for up to `timeout` milliseconds while waiting for a reference to be added to this queue. If zero, block indefinitely.
Returns:
  A reference object, if one was available within the specified timeout period, otherwise `null`
Throws:
  `IllegalArgumentException` - If the value of the timeout argument is negative
  `InterruptedException` - If the timeout wait is interrupted
See Also:
  - `Reference.enqueue()`

### remove

public Reference<? extends T> remove() throws InterruptedException
Removes the next reference object in this queue, blocking until one becomes available.

Returns:
  A reference object, blocking until one becomes available
Throws:
  `InterruptedException` - If the wait is interrupted
See Also:
  - `Reference.enqueue()`