State of an actor.
- New - Not yet started
- Runnable - Executing
- Suspended - Suspended, waiting in a
react
- TimedSuspended - Suspended, waiting in a
reactWithin
- Blocked - Blocked waiting in a
receive
- TimedBlocked - Blocked waiting in a
receiveWithin
- Terminated - Actor has terminated
定义一个类,EchoActor , 无限循环,等待receive
scala> import scala.actors.Actor
import scala.actors.Actor
scala> :paste
// Entering paste mode (ctrl-D to finish)
class EchoActor extends Actor{
override def act(): Unit = {
while(true){
receive {
case "lisi" => {
throw new Exception("不能听到有人说李四")
}
case msg => {
println("echo :"+msg)
}
}
}
}
override def exceptionHandler: PartialFunction[Exception, Unit] = {
case e:Exception => println(e.getMessage)
}
}
// Exiting paste mode, now interpreting.
warning: there was one deprecation warning; re-run with -deprecation for details
defined class EchoActor
scala> val echoActor = new EchoActor
echoActor: EchoActor = EchoActor@2d6764b2
scala> echoActor.getState
res0: scala.actors.Actor.State.Value = New
scala> echoActor.start()
res1: scala.actors.Actor = EchoActor@2d6764b2
scala> echoActor.getState
res2: scala.actors.Actor.State.Value = Blocked
scala> echoActor ! "zhangsan"
echo :zhangsan
scala> echoActor.getState
res4: scala.actors.Actor.State.Value = Blocked
scala> echoActor ! "lisi"
scala> 不能听到有人说李四
scala> echoActor.getState
res6: scala.actors.Actor.State.Value = Terminated
上述 看到 New Blocked Terminated 三种状态 ,验证了当在 receive 里面待待的时候,得到的状态就是 Blocked.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面验证一下 Suspended 状态
scala> import scala.actors.Actor
import scala.actors.Actor
scala> :paste
// Entering paste mode (ctrl-D to finish)
class EchoActor extends Actor{
override def act(): Unit = {
react{
case "lisi" => throw new Exception("对李四过敏,不要叫李四")
case msg => println(msg)
}
}
override def exceptionHandler: PartialFunction[Exception, Unit] = {
case e:Exception => println(e.getMessage)
}
}
// Exiting paste mode, now interpreting.
warning: there was one deprecation warning; re-run with -deprecation for details
defined class EchoActor
scala> val echoActor = new EchoActor
echoActor: EchoActor = EchoActor@15dcfae7
scala> echoActor.getState
res0: scala.actors.Actor.State.Value = New
scala> echoActor.start()
res1: scala.actors.Actor = EchoActor@15dcfae7
scala> echoActor.getState
res2: scala.actors.Actor.State.Value = Suspended
scala> echoActor ! "zhangsan"
scala> zhangsan
scala> echoActor.getState
res4: scala.actors.Actor.State.Value = Terminated
当一个actor在 react 当中进行等待的时候,其状态为 Suspended.