Packages

c

org.apache.pekko.dispatch

AbstractNodeQueue

abstract class AbstractNodeQueue[T] extends AtomicReference[Node[T]]

Lock-free MPSC linked queue implementation based on Dmitriy Vyukov's non-intrusive MPSC queue: https://www.1024cores.net/home/lock-free-algorithms/queues/non-intrusive-mpsc-node-based-queue

This queue could be wait-free (i.e. without the spinning loops in peekNode and pollNode) if it were permitted to return null while the queue is not quite empty anymore but the enqueued element is not yet visible. This would break actor scheduling, though.

Annotations
@SuppressWarnings()
Source
AbstractNodeQueue.java
Linear Supertypes
Known Subclasses
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. AbstractNodeQueue
  2. AtomicReference
  3. Serializable
  4. AnyRef
  5. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new AbstractNodeQueue()
    Attributes
    protected[dispatch]

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. def +(other: String): String
    Implicit
    This member is added by an implicit conversion from AbstractNodeQueue[T] toany2stringadd[AbstractNodeQueue[T]] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. def ->[B](y: B): (AbstractNodeQueue[T], B)
    Implicit
    This member is added by an implicit conversion from AbstractNodeQueue[T] toArrowAssoc[AbstractNodeQueue[T]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  5. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  6. final def accumulateAndGet(arg0: Node[T], arg1: BinaryOperator[Node[T]]): Node[T]
    Definition Classes
    AtomicReference
  7. final def add(value: T): Unit

    Add an element to the head of the queue.

    Add an element to the head of the queue.

    This method can be used from any thread.

    value

    the element to be added; must not be null

  8. final def addNode(n: Node[T]): Unit

    Add an element to the head of the queue, providing the queue node to be used.

    Add an element to the head of the queue, providing the queue node to be used.

    This method can be used from any thread.

    n

    the node containing the element to be added; both must not be null

  9. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  10. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @HotSpotIntrinsicCandidate() @native()
  11. final def compareAndExchange(arg0: Node[T], arg1: Node[T]): Node[T]
    Definition Classes
    AtomicReference
  12. final def compareAndExchangeAcquire(arg0: Node[T], arg1: Node[T]): Node[T]
    Definition Classes
    AtomicReference
  13. final def compareAndExchangeRelease(arg0: Node[T], arg1: Node[T]): Node[T]
    Definition Classes
    AtomicReference
  14. final def compareAndSet(arg0: Node[T], arg1: Node[T]): Boolean
    Definition Classes
    AtomicReference
  15. final def count(): Int

    This method returns an upper bound on the queue size at the time it starts executing.

    This method returns an upper bound on the queue size at the time it starts executing. It may spuriously return smaller values (including zero) if the consumer pulls items out concurrently.

    This method can be used from any thread.

    returns

    an upper bound on queue length at some time in the past

    Annotations
    @SuppressWarnings()
  16. def ensuring(cond: (AbstractNodeQueue[T]) => Boolean, msg: => Any): AbstractNodeQueue[T]
    Implicit
    This member is added by an implicit conversion from AbstractNodeQueue[T] toEnsuring[AbstractNodeQueue[T]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  17. def ensuring(cond: (AbstractNodeQueue[T]) => Boolean): AbstractNodeQueue[T]
    Implicit
    This member is added by an implicit conversion from AbstractNodeQueue[T] toEnsuring[AbstractNodeQueue[T]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  18. def ensuring(cond: Boolean, msg: => Any): AbstractNodeQueue[T]
    Implicit
    This member is added by an implicit conversion from AbstractNodeQueue[T] toEnsuring[AbstractNodeQueue[T]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  19. def ensuring(cond: Boolean): AbstractNodeQueue[T]
    Implicit
    This member is added by an implicit conversion from AbstractNodeQueue[T] toEnsuring[AbstractNodeQueue[T]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  20. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  21. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  22. final def get(): Node[T]
    Definition Classes
    AtomicReference
  23. final def getAcquire(): Node[T]
    Definition Classes
    AtomicReference
  24. final def getAndAccumulate(arg0: Node[T], arg1: BinaryOperator[Node[T]]): Node[T]
    Definition Classes
    AtomicReference
  25. final def getAndSet(arg0: Node[T]): Node[T]
    Definition Classes
    AtomicReference
  26. final def getAndUpdate(arg0: UnaryOperator[Node[T]]): Node[T]
    Definition Classes
    AtomicReference
  27. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @HotSpotIntrinsicCandidate() @native()
  28. final def getOpaque(): Node[T]
    Definition Classes
    AtomicReference
  29. final def getPlain(): Node[T]
    Definition Classes
    AtomicReference
  30. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @HotSpotIntrinsicCandidate() @native()
  31. final def isEmpty(): Boolean

    Query the queue whether it is empty right now.

    Query the queue whether it is empty right now.

    This method can be used from any thread.

    returns

    true if queue was empty at some point in the past

  32. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  33. final def lazySet(arg0: Node[T]): Unit
    Definition Classes
    AtomicReference
  34. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  35. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @HotSpotIntrinsicCandidate() @native()
  36. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @HotSpotIntrinsicCandidate() @native()
  37. final def peek(): T

    Query the queue tail for the next element without dequeuing it.

    Query the queue tail for the next element without dequeuing it.

    Use this method only from the consumer thread!

    returns

    element if there was one, or null if there was none

  38. final def peekNode(): Node[T]

    Query the queue tail for the next element without dequeuing it.

    Query the queue tail for the next element without dequeuing it.

    Use this method only from the consumer thread!

    !!! There is a copy of this code in pollNode() !!!

    returns

    queue node with element inside if there was one, or null if there was none

    Attributes
    protected[dispatch]
    Annotations
    @SuppressWarnings()
  39. final def poll(): T

    Pull one item from the queue’s tail if there is one.

    Pull one item from the queue’s tail if there is one.

    Use this method only from the consumer thread!

    returns

    element if there was one, or null if there was none

  40. final def pollNode(): Node[T]

    Pull one item from the queue, returning it within a queue node.

    Pull one item from the queue, returning it within a queue node.

    Use this method only from the consumer thread!

    returns

    queue node with element inside if there was one, or null if there was none

    Annotations
    @SuppressWarnings()
  41. final def set(arg0: Node[T]): Unit
    Definition Classes
    AtomicReference
  42. final def setOpaque(arg0: Node[T]): Unit
    Definition Classes
    AtomicReference
  43. final def setPlain(arg0: Node[T]): Unit
    Definition Classes
    AtomicReference
  44. final def setRelease(arg0: Node[T]): Unit
    Definition Classes
    AtomicReference
  45. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  46. def toString(): String
    Definition Classes
    AtomicReference → AnyRef → Any
  47. final def updateAndGet(arg0: UnaryOperator[Node[T]]): Node[T]
    Definition Classes
    AtomicReference
  48. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  49. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  50. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  51. final def weakCompareAndSetAcquire(arg0: Node[T], arg1: Node[T]): Boolean
    Definition Classes
    AtomicReference
  52. final def weakCompareAndSetPlain(arg0: Node[T], arg1: Node[T]): Boolean
    Definition Classes
    AtomicReference
  53. final def weakCompareAndSetRelease(arg0: Node[T], arg1: Node[T]): Boolean
    Definition Classes
    AtomicReference
  54. final def weakCompareAndSetVolatile(arg0: Node[T], arg1: Node[T]): Boolean
    Definition Classes
    AtomicReference

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable]) @Deprecated
    Deprecated

    (Since version 9)

  2. def formatted(fmtstr: String): String
    Implicit
    This member is added by an implicit conversion from AbstractNodeQueue[T] toStringFormat[AbstractNodeQueue[T]] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @deprecated @inline()
    Deprecated

    (Since version 2.12.16) Use formatString.format(value) instead of value.formatted(formatString), or use the f"" string interpolator. In Java 15 and later, formatted resolves to the new method in String which has reversed parameters.

  3. final def weakCompareAndSet(arg0: Node[T], arg1: Node[T]): Boolean
    Definition Classes
    AtomicReference
    Annotations
    @Deprecated
    Deprecated

    (Since version 9)

  4. def [B](y: B): (AbstractNodeQueue[T], B)
    Implicit
    This member is added by an implicit conversion from AbstractNodeQueue[T] toArrowAssoc[AbstractNodeQueue[T]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @deprecated
    Deprecated

    (Since version 2.13.0) Use -> instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.

Inherited from AtomicReference[Node[T]]

Inherited from Serializable

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion any2stringadd fromAbstractNodeQueue[T] to any2stringadd[AbstractNodeQueue[T]]

Inherited by implicit conversion StringFormat fromAbstractNodeQueue[T] to StringFormat[AbstractNodeQueue[T]]

Inherited by implicit conversion Ensuring fromAbstractNodeQueue[T] to Ensuring[AbstractNodeQueue[T]]

Inherited by implicit conversion ArrowAssoc fromAbstractNodeQueue[T] to ArrowAssoc[AbstractNodeQueue[T]]

Ungrouped