Package org.apache.tomcat.jdbc.pool
Class MultiLockFairBlockingQueue<E>
- java.lang.Object
-
- org.apache.tomcat.jdbc.pool.MultiLockFairBlockingQueue<E>
-
- Type Parameters:
E- Type of element in the queue
- All Implemented Interfaces:
java.lang.Iterable<E>,java.util.Collection<E>,java.util.concurrent.BlockingQueue<E>,java.util.Queue<E>
public class MultiLockFairBlockingQueue<E> extends java.lang.Object implements java.util.concurrent.BlockingQueue<E>EXPERIMENTAL AND NOT YET COMPLETE! An implementation of a blocking queue with fairness waiting and lock dispersal to avoid contention. 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 theBlockingQueueare implemented.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classMultiLockFairBlockingQueue.ExchangeCountDownLatch<T>protected classMultiLockFairBlockingQueue.FairIteratorprotected classMultiLockFairBlockingQueue.ItemFuture<T>
-
Constructor Summary
Constructors Constructor Description MultiLockFairBlockingQueue()Creates a new fair blocking queue.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanadd(E e)booleanaddAll(java.util.Collection<? extends E> c)voidclear()booleancontains(java.lang.Object e)booleancontainsAll(java.util.Collection<?> c)intdrainTo(java.util.Collection<? super E> c)intdrainTo(java.util.Collection<? super E> c, int maxElements)Eelement()intgetNextPoll()intgetNextPut()booleanisEmpty()java.util.Iterator<E>iterator()booleanoffer(E e)Will always return true, queue is unbounded.booleanoffer(E e, long timeout, java.util.concurrent.TimeUnit unit)Will never timeout, as it invokes theoffer(Object)method.Epeek()Epoll()Epoll(long timeout, java.util.concurrent.TimeUnit unit)Fair retrieval of an object in the queue.java.util.concurrent.Future<E>pollAsync()Request an item from the queue asynchronouslyvoidput(E e)intremainingCapacity()Eremove()booleanremove(java.lang.Object e)booleanremoveAll(java.util.Collection<?> c)booleanretainAll(java.util.Collection<?> c)intsize()Etake()java.lang.Object[]toArray()<T> T[]toArray(T[] a)-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
-
-
-
Method Detail
-
getNextPut
public int getNextPut()
-
getNextPoll
public int getNextPoll()
-
offer
public boolean offer(E e)
Will always return true, queue is unbounded.
-
offer
public boolean offer(E e, long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException
Will never timeout, as it invokes theoffer(Object)method. Once a lock has been acquired, the- Specified by:
offerin interfacejava.util.concurrent.BlockingQueue<E>- Throws:
java.lang.InterruptedException
-
poll
public E poll(long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException
Fair retrieval of an object in the queue. Objects are returned in the order the threads requested them.- Specified by:
pollin interfacejava.util.concurrent.BlockingQueue<E>- Throws:
java.lang.InterruptedException
-
pollAsync
public java.util.concurrent.Future<E> pollAsync()
Request an item from the queue asynchronously- Returns:
- - a future pending the result from the queue poll request
-
remove
public boolean remove(java.lang.Object e)
-
size
public int size()
- Specified by:
sizein interfacejava.util.Collection<E>
-
iterator
public java.util.Iterator<E> iterator()
-
contains
public boolean contains(java.lang.Object e)
-
add
public boolean add(E e)
-
drainTo
public int drainTo(java.util.Collection<? super E> c, int maxElements)
- Specified by:
drainToin interfacejava.util.concurrent.BlockingQueue<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
drainTo
public int drainTo(java.util.Collection<? super E> c)
- Specified by:
drainToin interfacejava.util.concurrent.BlockingQueue<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
put
public void put(E e) throws java.lang.InterruptedException
- Specified by:
putin interfacejava.util.concurrent.BlockingQueue<E>- Throws:
java.lang.InterruptedException
-
remainingCapacity
public int remainingCapacity()
- Specified by:
remainingCapacityin interfacejava.util.concurrent.BlockingQueue<E>
-
take
public E take() throws java.lang.InterruptedException
- Specified by:
takein interfacejava.util.concurrent.BlockingQueue<E>- Throws:
java.lang.InterruptedException
-
addAll
public boolean addAll(java.util.Collection<? extends E> c)
- Specified by:
addAllin interfacejava.util.Collection<E>
-
clear
public void clear()
- Specified by:
clearin interfacejava.util.Collection<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
containsAll
public boolean containsAll(java.util.Collection<?> c)
- Specified by:
containsAllin interfacejava.util.Collection<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
isEmpty
public boolean isEmpty()
- Specified by:
isEmptyin interfacejava.util.Collection<E>
-
removeAll
public boolean removeAll(java.util.Collection<?> c)
- Specified by:
removeAllin interfacejava.util.Collection<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
retainAll
public boolean retainAll(java.util.Collection<?> c)
- Specified by:
retainAllin interfacejava.util.Collection<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
toArray
public java.lang.Object[] toArray()
- Specified by:
toArrayin interfacejava.util.Collection<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
toArray
public <T> T[] toArray(T[] a)
- Specified by:
toArrayin interfacejava.util.Collection<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
element
public E element()
- Specified by:
elementin interfacejava.util.Queue<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
peek
public E peek()
- Specified by:
peekin interfacejava.util.Queue<E>- Throws:
java.lang.UnsupportedOperationException- - this operation is not supported
-
-