Scala Actor 相关 1. 自定义一个Actor 及 Actor 的状态

本文深入探讨Scala Actors模型中不同状态的含义与转换,包括New、Blocked、Terminated和Suspended等,通过具体代码示例展示如何创建和操作EchoActor类,以理解Actor生命周期及其状态变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值