abstract class AbstractNodeQueue[T] extends AtomicReference[Node[T]]
Lock-free MPSC linked queue implementation based on Dmitriy Vyukov's non-intrusive MPSC queue: http://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.
- Source
- AbstractNodeQueue.java
- Alphabetic
- By Inheritance
- AbstractNodeQueue
- AtomicReference
- Serializable
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Instance Constructors
-
new
AbstractNodeQueue()
- Attributes
- protected[akka.dispatch]
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
def
+(other: String): String
- Implicit
- This member is added by an implicit conversion from AbstractNodeQueue[T] to any2stringadd[AbstractNodeQueue[T]] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
-
def
->[B](y: B): (AbstractNodeQueue[T], B)
- Implicit
- This member is added by an implicit conversion from AbstractNodeQueue[T] to ArrowAssoc[AbstractNodeQueue[T]] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
accumulateAndGet(arg0: Node[T], arg1: BinaryOperator[Node[T]]): Node[T]
- Definition Classes
- AtomicReference
-
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
-
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
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
compareAndSet(arg0: Node[T], arg1: Node[T]): Boolean
- Definition Classes
- AtomicReference
-
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
-
def
ensuring(cond: (AbstractNodeQueue[T]) ⇒ Boolean, msg: ⇒ Any): AbstractNodeQueue[T]
- Implicit
- This member is added by an implicit conversion from AbstractNodeQueue[T] to Ensuring[AbstractNodeQueue[T]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: (AbstractNodeQueue[T]) ⇒ Boolean): AbstractNodeQueue[T]
- Implicit
- This member is added by an implicit conversion from AbstractNodeQueue[T] to Ensuring[AbstractNodeQueue[T]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean, msg: ⇒ Any): AbstractNodeQueue[T]
- Implicit
- This member is added by an implicit conversion from AbstractNodeQueue[T] to Ensuring[AbstractNodeQueue[T]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean): AbstractNodeQueue[T]
- Implicit
- This member is added by an implicit conversion from AbstractNodeQueue[T] to Ensuring[AbstractNodeQueue[T]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from AbstractNodeQueue[T] to StringFormat[AbstractNodeQueue[T]] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
-
final
def
get(): Node[T]
- Definition Classes
- AtomicReference
-
final
def
getAndAccumulate(arg0: Node[T], arg1: BinaryOperator[Node[T]]): Node[T]
- Definition Classes
- AtomicReference
-
final
def
getAndSet(arg0: Node[T]): Node[T]
- Definition Classes
- AtomicReference
-
final
def
getAndUpdate(arg0: UnaryOperator[Node[T]]): Node[T]
- Definition Classes
- AtomicReference
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
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
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
lazySet(arg0: Node[T]): Unit
- Definition Classes
- AtomicReference
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
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
-
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[akka.dispatch]
-
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
-
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
-
final
def
set(arg0: Node[T]): Unit
- Definition Classes
- AtomicReference
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AtomicReference → AnyRef → Any
-
final
def
updateAndGet(arg0: UnaryOperator[Node[T]]): Node[T]
- Definition Classes
- AtomicReference
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
weakCompareAndSet(arg0: Node[T], arg1: Node[T]): Boolean
- Definition Classes
- AtomicReference
-
def
→[B](y: B): (AbstractNodeQueue[T], B)
- Implicit
- This member is added by an implicit conversion from AbstractNodeQueue[T] to ArrowAssoc[AbstractNodeQueue[T]] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc