Actor
- Actor类似于java中的多线程编程,用于线程通信,scala中提供的模型与多线程不同,scala中Actor尽可能避免锁和共享状态,从而避免多线程并发时出现资料争用的情况,进而提升多线程编程的性能。些外Scala Actor的这种模型还可以避免死锁等一系列传统多线程的问题
- Spark中使用的分布式多线程框架,是Akka。Akka也实现了类似于Actor的模型。
- 收发case class类型的消息,在scala中,通常建议使用样例类,即case class来作为消息进行发送,然后在actor接收消息之后,可以使用scala强大的模式匹配功能来进行不同消息处理。
收发case class类型的消息
import scala.actors.Actor
case class Login(var uname:String,var pwd:String)
case class Register(var uname:String,var pwd:String)
class ActorServer extends Actor{
override def act(): Unit = {
while(true) {
receive{
case msg:String => println(msg)
case Login(uname,pwd) =>println("亲爱的"+uname+"欢迎登录!")
case Register(uname,pwd) =>println("恭喜"+uname+",注册成功!")
}
}
}
}
Actor的创建、启动和消息发送
object ActorClient {
def main(args: Array[String]): Unit = {
val server = new ActorServer()
server.start
server!"hello"
server!new Login("a001","123456")
server!new Register("ab003","2312")
}
}