scala 多线程actor

来源:互联网 发布:优衣库淘宝假货 编辑:程序博客网 时间:2024/05/21 17:36
java--thread:共享全局变量的加锁机制,不可避免造成死锁scala--actor在做分布式的时候一定不要有共享全局的变量,更不能做加锁机制。每个actor都和公司的一个员工一样,都有自己的循环器,每天循环自己的邮箱查看邮件,回复邮件作出应答。!:异步的,给actor发完信息后不会继续等回答,会继续往下执行!?:给actor发完信息后会等对方回答,没有回答就一直等待hung住!!:发送完之后,同时希望能够得到结果scala> import scala.actors.Actorimport scala.actors.Actorscala> class HiActor extends Actor{      --相当于Thread     |   def act(){                 --相当于run     |     while(true){     |       receive{     |         case name: String => println(name)     |       }     |     }     |   }     | }defined class HiActorscala>scala> val actor = new HiActoractor: HiActor = HiActor@75d29995scala> actor.start()           res20: scala.actors.Actor = HiActor@75d29995scala> actor ! "Spark"         --给actor发送信息:"Spark"scala> Sparkscala> actor ! "Scala"Scala-------------------------------------------scala> case class Basic(name: String,age: Int)defined class Basicscala> case class Worker(name: String,age: Int)defined class Workerscala> class BasicActor extends Actor{     |   def act(){     |     while(true){     |       receive{     |         case Basic(name,age) => println("Basic Info:" + name + ":" + age)     |         case Worker(name,age) => println("Worker Info:" + name + ":" + age)     |       }     |     }     |   }     | }defined class BasicActorscala> val b = new BasicActorb: BasicActor = BasicActor@43aad2f4scala> b.startres23: scala.actors.Actor = BasicActor@43aad2f4scala> b ! Basic("Scala",13)Basic Info:Scala:13scala> b ! Worker("Spark",7)Worker Info:Spark:7scala> val a = b !! Worker("Spark",7)         --!!:发送完之后,同时希望能够得到结果a: b.Future[Any] = <function0>scala> Worker Info:Spark:7scala> b !? Worker("Spark",7)   --一直在等待Worker Info:Spark:7

0 0
原创粉丝点击