Class PushPullConcurrentQueue<E>

  • All Implemented Interfaces:
    ConcurrentQueue<E>
    Direct Known Subclasses:
    PushPullBlockingQueue

    public class PushPullConcurrentQueue<E>
    extends Object
    implements ConcurrentQueue<E>
    Tuned version of Martin Thompson's push pull queue Transfers from a single thread writer to a single thread reader are orders of nanoseconds (3-5) This code is optimized and tested using a 64bit HotSpot JVM on an Intel x86-64 environment. Other environments should be carefully tested before using in production. Created by jcairns on 5/28/14.
    • Constructor Detail

      • PushPullConcurrentQueue

        public PushPullConcurrentQueue​(int capacity)
    • Method Detail

      • offer

        public boolean offer​(E e)
        Description copied from interface: ConcurrentQueue
        Add element t to the ring
        Specified by:
        offer in interface ConcurrentQueue<E>
        Parameters:
        e - - element to offer
        Returns:
        boolean - true if the operation succeeded
      • poll

        public E poll()
        Description copied from interface: ConcurrentQueue
        remove the first element from the queue and return it
        Specified by:
        poll in interface ConcurrentQueue<E>
        Returns:
        T
      • remove

        public int remove​(E[] e)
        Description copied from interface: ConcurrentQueue
        return all elements in the queue to the provided array, up to the size of the provided array.
        Specified by:
        remove in interface ConcurrentQueue<E>
        Parameters:
        e - - The element array
        Returns:
        int - the number of elements added to t
      • peek

        public final E peek()
        Description copied from interface: ConcurrentQueue
        return the first element in the queue
        Specified by:
        peek in interface ConcurrentQueue<E>
        Returns:
        E - The element
      • size

        public final int size()
        This implemention is known to be broken if preemption were to occur after reading the tail pointer. Code should not depend on size for a correct result.
        Specified by:
        size in interface ConcurrentQueue<E>
        Returns:
        int - possibly the size, or possibly any value less than capacity()
      • capacity

        public int capacity()
        Specified by:
        capacity in interface ConcurrentQueue<E>
        Returns:
        int - the capacity of the queue
      • isEmpty

        public final boolean isEmpty()
        Specified by:
        isEmpty in interface ConcurrentQueue<E>
        Returns:
        boolean - true if the queue is currently empty
      • contains

        public final boolean contains​(Object o)
        Specified by:
        contains in interface ConcurrentQueue<E>
        Parameters:
        o - - the object to test
        Returns:
        boolean - true if specified object is contained in the queue