scala(8)Actor
来源:互联网 发布:linux解压zip命令详解 编辑:程序博客网 时间:2024/05/22 01:53
Actor 用于并行计算 ,Actor之间可以进行消息发送。
case class 是理想的载体,Actor的优势在于不基于资源与锁的基础上,完成并发。
Actor的建立
import scala.actors._class ActorOps {}object helloActor extends Actor{ def act(): Unit ={ for (i<-1 to 5){ println("the is a scala actor") Thread.sleep(2000) } }}object ActorOps{ def main(args: Array[String]) { helloActor.start() }}
不常用的Actor创建
import scala.actors.Actor._
val secondActor=actor{
for (i<-1 to 5){
println(“the is a second scala actor”)
Thread.sleep(2000)
}
Actor的消息机制
!单方面传输
!?必须等到另一个Actor完成
!!取得发过去消息的结果
import scala.actors._class ActorOps {}object helloActor extends Actor{ def act(): Unit ={ while (true){ receive{ case x:Int => println("got an Int") case _=>println("some other type") } } }}object ActorOps{ def main(args: Array[String]) { helloActor.start() helloActor ! "hi,the is scala!" helloActor ! 1 }
Actor共享线程
通过react来进行线程共享
import scala.actors._object NameResolver extends Actor{ import java.net.{InetAddress,UnknownHostException} def act() { react { case Net(name: String, actor: Actor) => actor ! getIP(name)//actor处可以改成sender表示发送的那个actor 用于回复发来的Actor case "EXIT" => println("exiting") case msg => println("Unhandled message:" + msg) act() } } def getIP(name:String): Option[InetAddress] ={ try{ Some(InetAddress.getByName(name)) }catch { case _:UnknownHostException=>None } }}object ActorOps { def main(args: Array[String]) { NameResolver.start NameResolver ! ("www.baidu.com",self)//self代表当前actor,所以下面的self.receive能接收到信息 println(self.receiveWithin(1000){case x=>x}) }}
多个Actor协同工作
下面程序NameResolve把处理好的数据发给helloActor 。
好的actor使用case class来完成传递消息,结束时使用匹配模式。
import scala.actors._import scala.actors.Actor._class ActorOps {}object NameResolver extends Actor{ import java.net.{InetAddress,UnknownHostException} def act() { react { case (name: String, actor: Actor) => actor ! getIP(name)//接受一个元组并把消息传给actor// case Net(name: String, actor: Actor) => actor ! getIP(name)//使用case class传递数据 case "EXIT" => println("exiting") case msg => println("Unhandled message:" + msg) act() } } def getIP(name:String): Option[InetAddress] ={ try{ Some(InetAddress.getByName(name)) }catch { case _:UnknownHostException=>None } }}object helloActor extends Actor{ def act(): Unit ={ while (true){ receive{ case msg=> print("receive massage:"+msg) case x:Int => println("got an Int") case _=>println("some other type") } } }}case class Net(name: String, actor: Actor)//case classobject ActorOps { def main(args: Array[String]) { NameResolver.start NameResolver ! ("www.baidu.com",helloActor)//发送要解析的网址,发给的actor// NameResolver ! Net("www.baidu.com",helloActor) helloActor.start() }}
0 0
- scala(8)Actor
- scala actor
- scala Actor
- Scala actor
- Scala的线程actor
- Scala actor的使用
- scala 简要: Actor
- scala Actor 初探
- Scala Actor并发编程
- scala 多线程actor
- Scala Actor通信
- scala actor异步
- Scala Actor并发编程
- Scala入门之Actor
- Scala之Actor
- scala之actor编程
- scala中的actor
- Scala-Actor并行wordcount
- Android5.0动画,360安全卫士按下波纹效果
- sudo命令
- 监听socket(bind()的backlog参数)
- 迭代器访问容器中的元素
- Genymotion使用中碰到的问题总结
- scala(8)Actor
- ThreadLocal(3)--源码分析
- redis 3.0的集群部署
- Win32学习笔记 - 文件操作
- 高通平台手机开发之LCD
- IOS pch 文件如何使用
- java方法调用之重载、重写的调用原理(一)
- Pop上手体验(i)
- cocos2dx使用正则式例子