第68讲 scala并发编程原生线程actor、class class 下的消息传递和偏函数

时间:2022-09-28 19:59:34

上一节讲了actor message 是通过message 向actor 的发送消息,开发者只需要向actor 发送消息,不需要关心actor与线程更高程度的抽象。其实scala 也可以当线程当actor 使用

一、 Scala的原生线程(Main主线程)当 Actor

import scala.actors.Actor
import scala.actors.Actor._

case class Person(name:String,age:Int)

class HelloActor extends Actor{
   def act(): Unit ={
     while(true){
       receive{
         case Person(name,age) =>{
           println("name:" + name + ",age="+age)
           sender ! "Echo!!"
         }
       }
     }
   }
}
object Actor_With_CaseClass {

   def main (args: Array[String]) {
    val hActor = new HelloActor
    hActor.start

    hActor ! Person("spark" ,6 )

    self.receive {case msg => println(msg)}
  }
}

self.receive {case msg => println(msg)} 放在main 函数中,接受其他actor 发送的消息。

二、case class 作为消息的好处

  1. 消息不可变
  2. 方便模式匹配
    方便并发、分布式编程提供方便

三、 使用actor 注意点

  1. 尽量不要消息共享
    解决方法有2个,一是,指定接受消息的actor ,另一个是 设置全局的actor
  2. 尽可能处理actor所有消息
    由于actor的邮箱 是有限的,方法如下:
       receive{
         case Person(name,age) =>{
           println("name:" + name + ",age="+age)
           sender ! "Echo!!"
         }
         case _ =>
       }

参考文档
百度网盘:http://pan.baidu.com/share/home?uk=4013289088#category/type=0
微信号:18610086859
DT大数据微信公众账号:DT_Spark
DT大数据梦工厂交流群:462923555/418110145/437123764