示例代码及注释:
//scala并发编程中的react和loop,共同特点: //通过线程存用的方式让性能有所提升。 //Actor本身的运行,被actor子系统管理的时候,会有一个或者多个远程的线程让当前的actor使用 //一般情况下每个Actor都有自己的线程。只有有自己的线程时,我们的Actor中的actor方法才会执行。 //但是,这样线程的开销会非常大,所以为了共用线程,一个actor使用多个线程后,我们不想立即回收,我们想共用。 //scala给我们提供了两个方法:react方法和loop方法 //react和receive其实都是偏函数 object NameResolver extends Actor{ def act(){ /*react{//不返回具体的内容 case Net(name,actor)=> sender ! 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("Unhadled 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]): Unit = { NameResolver.start NameResolver ! Net("www.baidu.com",self) println(self.receiveWithin(1000){case x=>x}) } }
相关来源:DT大数据梦工厂,微信公众号是DT_Spark,每天都会有大数据实战视频发布,请您持续学习。
相关资料:
scala深入浅出实战经典(1-64讲)完整视频、PPT、代码下载:
百度云盘:http://pan.baidu.com/s/1c0noOt6
腾讯微云:http://url.cn/TnGbdC
360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码45e2
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-09 04:02:31