Class LinkedTransferQueue<E>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- com.google.code.yanf4j.util.LinkedTransferQueue<E>
-
- Type Parameters:
E- the type of elements held in this collection
- All Implemented Interfaces:
Iterable<E>,Collection<E>,BlockingQueue<E>,Queue<E>
- Direct Known Subclasses:
FlowControlLinkedTransferQueue
public class LinkedTransferQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>
An unbounded TransferQueue based on linked nodes. This queue orders elements FIFO (first-in-first-out) with respect to any given producer. The head of the queue is that element that has been on the queue the longest time for some producer. The tail of the queue is that element that has been on the queue the shortest time for some producer.Beware that, unlike in most collections, the size method is NOT a constant-time operation. Because of the asynchronous nature of these queues, determining the current number of elements requires a traversal of the elements.
This class and its iterator implement all of the optional methods of the
CollectionandIteratorinterfaces.Memory consistency effects: As with other concurrent collections, actions in a thread prior to placing an object into a
LinkedTransferQueuehappen-before actions subsequent to the access or removal of that element from theLinkedTransferQueuein another thread.- Author:
- Doug Lea, The Netty Project (netty-dev@lists.jboss.org), Trustin Lee (tlee@redhat.com)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classLinkedTransferQueue.PaddedAtomicReference<T>Padded version of AtomicReference used for head, tail and cleanMe, to alleviate contention across threads CASing one vs the other.
-
Constructor Summary
Constructors Constructor Description LinkedTransferQueue()Creates an initially empty LinkedTransferQueue.LinkedTransferQueue(Collection<? extends E> c)Creates a LinkedTransferQueue initially containing the elements of the given collection, added in traversal order of the collection's iterator.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intdrainTo(Collection<? super E> c)intdrainTo(Collection<? super E> c, int maxElements)intgetWaitingConsumerCount()booleanhasWaitingConsumer()booleanisEmpty()Iterator<E>iterator()booleanoffer(E e)booleanoffer(E e, long timeout, TimeUnit unit)Epeek()Epoll()Epoll(long timeout, TimeUnit unit)voidput(E e)intremainingCapacity()intsize()Returns the number of elements in this queue.Etake()voidtransfer(E e)booleantryTransfer(E e)booleantryTransfer(E e, long timeout, TimeUnit unit)-
Methods inherited from class java.util.AbstractCollection
contains, containsAll, remove, removeAll, retainAll, toArray, toArray, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.concurrent.BlockingQueue
add, contains, remove
-
Methods inherited from interface java.util.Collection
addAll, clear, containsAll, equals, hashCode, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray, toArray
-
-
-
-
Constructor Detail
-
LinkedTransferQueue
public LinkedTransferQueue()
Creates an initially empty LinkedTransferQueue.
-
LinkedTransferQueue
public LinkedTransferQueue(Collection<? extends E> c)
Creates a LinkedTransferQueue initially containing the elements of the given collection, added in traversal order of the collection's iterator.- Parameters:
c- the collection of elements to initially contain- Throws:
NullPointerException- if the specified collection or any of its elements are null
-
-
Method Detail
-
put
public void put(E e) throws InterruptedException
- Specified by:
putin interfaceBlockingQueue<E>- Throws:
InterruptedException
-
offer
public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
- Specified by:
offerin interfaceBlockingQueue<E>- Throws:
InterruptedException
-
offer
public boolean offer(E e)
-
transfer
public void transfer(E e) throws InterruptedException
- Throws:
InterruptedException
-
tryTransfer
public boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException
- Throws:
InterruptedException
-
tryTransfer
public boolean tryTransfer(E e)
-
take
public E take() throws InterruptedException
- Specified by:
takein interfaceBlockingQueue<E>- Throws:
InterruptedException
-
poll
public E poll(long timeout, TimeUnit unit) throws InterruptedException
- Specified by:
pollin interfaceBlockingQueue<E>- Throws:
InterruptedException
-
drainTo
public int drainTo(Collection<? super E> c)
- Specified by:
drainToin interfaceBlockingQueue<E>
-
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
- Specified by:
drainToin interfaceBlockingQueue<E>
-
iterator
public Iterator<E> iterator()
- Specified by:
iteratorin interfaceCollection<E>- Specified by:
iteratorin interfaceIterable<E>- Specified by:
iteratorin classAbstractCollection<E>
-
isEmpty
public boolean isEmpty()
- Specified by:
isEmptyin interfaceCollection<E>- Overrides:
isEmptyin classAbstractCollection<E>
-
hasWaitingConsumer
public boolean hasWaitingConsumer()
-
size
public int size()
Returns the number of elements in this queue. If this queue contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.Beware that, unlike in most collections, this method is NOT a constant-time operation. Because of the asynchronous nature of these queues, determining the current number of elements requires an O(n) traversal.
- Specified by:
sizein interfaceCollection<E>- Specified by:
sizein classAbstractCollection<E>- Returns:
- the number of elements in this queue
-
getWaitingConsumerCount
public int getWaitingConsumerCount()
-
remainingCapacity
public int remainingCapacity()
- Specified by:
remainingCapacityin interfaceBlockingQueue<E>
-
-