上一节讲了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