final case class Actor[A](handler: (A) => Unit, onError: (Throwable) => Unit = ActorUtils.rethrowError)(implicit strategy: Strategy) extends Product with Serializable
Processes messages of type A
, one at a time. Messages are submitted to
the actor with the method !
. Processing is typically performed asynchronously,
this is controlled by the provided strategy
.
Memory consistency guarantee: when each message is processed by the handler
, any memory that it
mutates is guaranteed to be visible by the handler
when it processes the next message, even if
the strategy
runs the invocations of handler
on separate threads. This is achieved because
the Actor
reads a volatile memory location before entering its event loop, and writes to the same
location before suspending.
Implementation based on non-intrusive MPSC node-based queue, described by Dmitriy Vyukov: http://www.1024cores.net/home/lock-free-algorithms/queues/non-intrusive-mpsc-node-based-queue
- A
The type of messages accepted by this actor.
- handler
The message handler
- onError
Exception handler, called if the message handler throws any
Throwable
.- strategy
Execution strategy, for example, a strategy that is backed by an
ExecutorService
- Source
- Actor.scala
- Alphabetic
- By Inheritance
- Actor
- Serializable
- Product
- Equals
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new Actor(handler: (A) => Unit, onError: (Throwable) => Unit = ActorUtils.rethrowError)(implicit strategy: Strategy)
- handler
The message handler
- onError
Exception handler, called if the message handler throws any
Throwable
.- strategy
Execution strategy, for example, a strategy that is backed by an
ExecutorService
Value Members
- def !(a: A): Unit
Alias for
apply
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##(): Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def apply(a: A): Unit
Pass the message
a
to the mailbox of this actor - final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- def contramap[B](f: (B) => A): Actor[B]
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- val handler: (A) => Unit
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- val onError: (Throwable) => Unit
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- implicit val strategy: Strategy
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- val toEffect: Run[A]
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()