码迷,mamicode.com
首页 > 其他好文 > 详细

DT大数据梦工厂 第69讲

时间:2015-07-26 15:37:49      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

王家林亲授《DT大数据梦工厂》大数据实战视频“Scala深入浅出实战经典”视频、音频和PPT下载!第69讲:Scala并发编程react、loop代码实战详解
百度云:http://pan.baidu.com/s/1pJtEubL
腾讯微云:http://url.cn/eqMJ9T
360云盘:http://yunpan.cn/cc9PJQBpuPHk6 访问密码 18cc
本节王老师讲了共享线程的react,和方便写代码的loop方式。
正常如果我们用receive来接收消息,必须要重新建一个线程,而用react来接收,就会重用已经存在的线程。因为这个react是放在一个object中的,这个object继承Actor。并且react不需要返回值,所以也就不需要保留当前线程的堆栈,所以可以重用线程。
object NameResolver extends Actor{
def act(){
react{
case Net(name,actor)=>//这里Net引用了一个actor参数
sender ! getIp(name)
act//因为react没有返回,所以还要再执行一次act,来让其执行receive的工作。
case "Exit"=>println("Name resolver exiting.")
case msg=>println("Unhandled nessage: "+msg)
act
}
}

loop{
react{
case Net(name,actor)=>//这里Net引用了一个actor参数.但是没有再次调用act简化了代码
sender ! getIp(name)
case "Exit"=>println("Name resolver exiting.")
case msg=>println("Unhandled nessage: "+msg)
}
}
def getIp(name:String):Option[InetAddress]={//获取ip地址
try{
println(InetAddress.getByName(name))
Some(InetAddress.getByName(name))
}catch{
case _: UnknownHostException=>None
}
}
}
case class Net(name:String,actor:Actor)
object Actor_More_Effective{
def main(args: Array[String]){
NameResolver.start
NameResolver ! Net("www.baidu.com",self)发送的是在actor的同一个线程中运行
println(self.receiveWithin(1000){case x=>x})
}
}

DT大数据梦工厂 第69讲

标签:

原文地址:http://www.cnblogs.com/trgaaaaa/p/4677660.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!