在main下面的scala目录下创建一个包(好习惯:所有的代码分包放)
自己给自己发消息
怎么样获得一个Actor呢?
首先得有一个类,我们定义一个helloActor类,让他继承Actor,导包快捷键Alt+Enter,control+ i 实现方法。
然后创建一个ActorRef的引用。ActorRef --》ActorSystem
把光标放在单词上 control + b 可以去看实现 control+ p 可以看参数提示
通过contl+ b 去看ActorSystem 是一个object,上面定义了很多方法可以使用。
actorOf方法是用来造actor的,参数Props[类后面的名字] 返回 类的一个引用,该参数后面起的名字为该’工厂‘ 造的
actor的名字。通过该方法我们可以拿到此actor的actorRef。actorRef 是可以发送消息的,方法为!
package cn.sheep.actor
import akka.actor.{Actor, ActorRef, ActorSystem, Props}
class HelloActor extends Actor{
override def receive: Receive = {
//接受消息并处理
case "你好帅" => println("竟说实话!!")
case "丑" => println("滚犊子!")
case "stop" => {
context.stop(self) //把actor给停了
context.system.terminate() //关闭ActorSystem
}
}
}
object HelloActor {
private val nBFactory: ActorSystem = ActorSystem("NBFactory") //工厂
private val helloActorRef: ActorRef = nBFactory.actorOf(Props[HelloActor], "helloActor")
def main(args: Array[String]): Unit = {
//给自己发送消息
helloActorRef ! "你好帅"
helloActorRef ! "丑"
helloActorRef ! "stop"
}
}
如果没有加停止的消息,因为actor好像有个线程池,他会一直运行。(有错误请指出)
context上下文实现停。
加上stop消息后,它发送一次消息就停了。点下面的按钮会再发一次。