您的位置:首页 > 编程语言

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

2015-07-28 07:28 309 查看
上一节讲了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 作为消息的好处

消息不可变

方便模式匹配

方便并发、分布式编程提供方便

三、 使用actor 注意点

尽量不要消息共享

解决方法有2个,一是,指定接受消息的actor ,另一个是 设置全局的actor

尽可能处理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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: