DT大数据梦工厂 第69讲
王家林亲授《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})
		}
	}
                    
                
                
            
        
浙公网安备 33010602011771号