Class FairBlockingQueue<E>
java.lang.Object
org.apache.tomcat.jdbc.pool.FairBlockingQueue<E>
- Type Parameters:
E- Type of element in the queue
- All Implemented Interfaces:
Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
A simple implementation of a blocking queue with fairness waiting. invocations to method poll(...) will get handed
out in the order they were received. Locking is fine grained, a shared lock is only used during the first level of
contention, waiting is done in a lock per thread basis so that order is guaranteed once the thread goes into a
suspended monitor state.
Not all of the methods of the
Not all of the methods of the
BlockingQueue are implemented.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classA count down latch that can be used to exchange information.protected classIterator safe from concurrent modification exceptions.protected classA future used to check if a connection has been made available. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanbooleanaddAll(Collection<? extends E> c) voidCancel the futures of all the asynchronous polls that are waiting for an item on this queue.voidclear()booleanbooleancontainsAll(Collection<?> c) intdrainTo(Collection<? super E> c) intdrainTo(Collection<? super E> c, int maxElements) element()booleanisEmpty()iterator()booleanWill always return true, queue is unbounded.booleanWill never timeout, as it invokes theoffer(Object)method.peek()poll()Fair retrieval of an object in the queue.Request an item from the queue asynchronously.voidintremove()booleanbooleanremoveAll(Collection<?> c) booleanretainAll(Collection<?> c) intsize()take()Object[]toArray()<T> T[]toArray(T[] a) Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Collection
equals, hashCode, parallelStream, removeIf, spliterator, stream
-
Constructor Details
-
FairBlockingQueue
public FairBlockingQueue()Creates a new fair blocking queue.
-
-
Method Details
-
offer
Will always return true, queue is unbounded.- Specified by:
offerin interfaceBlockingQueue<E>- Specified by:
offerin interfaceQueue<E>- Throws:
NullPointerException- - if the specified element is null
-
offer
Will never timeout, as it invokes theoffer(Object)method. Once a lock has been acquired, the- Specified by:
offerin interfaceBlockingQueue<E>- Throws:
InterruptedException
-
poll
Fair retrieval of an object in the queue. Objects are returned in the order the threads requested them. If the wait is interrupted but an object was handed over to this waiter all the same, the object is returned and the interrupt status of the calling thread is restored instead of being cleared.- Specified by:
pollin interfaceBlockingQueue<E>- Throws:
InterruptedException
-
pollAsync
Request an item from the queue asynchronously. If no item is available, the returned future registers a waiter on the queue. Cancelling the future deregisters that waiter again, provided the item has not already been handed over to the future. A future that is no longer needed must therefore be cancelled, so that a subsequent offer does not hand an item over to a future nobody is waiting on. AFuture.get(long, TimeUnit)call on the future that times out deregisters the waiter in the same way and fails the future terminally, so that every later retrieval from it fails right away instead of waiting for an item that can no longer be handed over. OncecancelWaiters()has been called, no waiter is registered anymore: the returned future is cancelled right away, as the caller that cancelled the waiters offers no further item that could serve it.- Returns:
- - a future pending the result from the queue poll request
-
cancelWaiters
public void cancelWaiters()Cancel the futures of all the asynchronous polls that are waiting for an item on this queue. A thread that is blocked in one of theFuture.get()methods of such a future observes aCancellationExceptioninstead of waiting for an item that will never be offered, and later calls topollAsync()do not register a waiter at all. A future an item has already been handed over to is not cancelled, it completes with that item as usual.
This makes a queue that is never fed again terminate the callers that wait on it, instead of leaving them parked forever. -
remove
- Specified by:
removein interfaceBlockingQueue<E>- Specified by:
removein interfaceCollection<E>
-
size
public int size()- Specified by:
sizein interfaceCollection<E>
-
iterator
-
poll
-
contains
- Specified by:
containsin interfaceBlockingQueue<E>- Specified by:
containsin interfaceCollection<E>
-
add
- Specified by:
addin interfaceBlockingQueue<E>- Specified by:
addin interfaceCollection<E>- Specified by:
addin interfaceQueue<E>
-
drainTo
- Specified by:
drainToin interfaceBlockingQueue<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
drainTo
- Specified by:
drainToin interfaceBlockingQueue<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
put
- Specified by:
putin interfaceBlockingQueue<E>- Throws:
InterruptedException
-
remainingCapacity
public int remainingCapacity()- Specified by:
remainingCapacityin interfaceBlockingQueue<E>
-
take
- Specified by:
takein interfaceBlockingQueue<E>- Throws:
InterruptedException
-
addAll
- Specified by:
addAllin interfaceCollection<E>
-
clear
public void clear()- Specified by:
clearin interfaceCollection<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
containsAll
- Specified by:
containsAllin interfaceCollection<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
isEmpty
public boolean isEmpty()- Specified by:
isEmptyin interfaceCollection<E>
-
removeAll
- Specified by:
removeAllin interfaceCollection<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
retainAll
- Specified by:
retainAllin interfaceCollection<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
toArray
- Specified by:
toArrayin interfaceCollection<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
toArray
public <T> T[] toArray(T[] a) - Specified by:
toArrayin interfaceCollection<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
element
- Specified by:
elementin interfaceQueue<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
peek
- Specified by:
peekin interfaceQueue<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-
remove
- Specified by:
removein interfaceQueue<E>- Throws:
UnsupportedOperationException- - this operation is not supported
-