标签:
刚才看了一下,群里王家林老师又更新课程了,真为王老师的勤奋感到佩服,于是迫不及待的下载下来观看学习。本期讲的是关于scala并发编程的react、loop代码实战。
信息来源于 DT大数据梦工厂微信公众账号:DT_Spark
关注微信账号,获取更多关于王家林老师的课程内容
王家林亲授《DT大数据梦工厂》大数据实战视频“Scala深入浅出实战经典”视频、音频和PPT下载!
百度云盘:http://pan.baidu.com/s/1c0noOt6
腾讯微云:http://url.cn/TnGbdC
360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2
OK,按照老规矩,让我们从代码出发:
object NameResolver extends Actor{
def act(){
react{
case Net(name,actor) =>
actor ! getIp(name)
act
case "EXIT" =>println("Name resolver exiting.")
case msg =>
println("unhandled message : " + msg)
act
}
}
// loop{
// react{
// case Net(name,actor)=>
// actor ! getIp(name)
//
// case msg =>
// println("unhandled message : " + msg)
// }
// }
}
def getIp(name:String) :Option[InetAddress] = {
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)
println(self.reactWithin(1000){case x =>x})
}
}
我们一看NameResolver的定义。在本Actor定义的时候,我们没有用receive的方式,而是用的react方法,这样做的好处是,下一个actor可以重用当前actor所在的线程,达到线程重用的效果。
那我们的scala代码库为了简化代码,提供了loop方法,可以简化react方法的调用。
王家林系列之scala--第69讲:Scala并发编程react、loop代码实战详解
标签:
原文地址:http://www.cnblogs.com/qingyuesama/p/4676913.html