- java--thread:共享全局变量的加锁机制,不可避免造成死锁
- scala--actor
- 在做分布式的时候一定不要有共享全局的变量,更不能做加锁机制。
- 每个actor都和公司的一个员工一样,都有自己的循环器,每天循环自己的邮箱查看邮件,回复邮件作出应答。
- !:异步的,给actor发完信息后不会继续等回答,会继续往下执行
- !?:给actor发完信息后会等对方回答,没有回答就一直等待hung住
- !!:发送完之后,同时希望能够得到结果
- scala> import scala.actors.Actor
- import scala.actors.Actor
- scala> class HiActor extends Actor{ --相当于Thread
- | def act(){ --相当于run
- | while(true){
- | receive{
- | case name: String => println(name)
- | }
- | }
- | }
- | }
- defined class HiActor
- scala>
- scala> val actor = new HiActor
- actor: HiActor = HiActor@75d29995
- scala> actor.start()
- res20: scala.actors.Actor = HiActor@75d29995
- scala> actor ! "Spark" --给actor发送信息:"Spark"
- scala> Spark
- scala> actor ! "Scala"
- Scala
- -------------------------------------------
- scala> case class Basic(name: String,age: Int)
- defined class Basic
- scala> case class Worker(name: String,age: Int)
- defined class Worker
- scala> 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 BasicActor
- scala> val b = new BasicActor
- b: BasicActor = BasicActor@43aad2f4
- scala> b.start
- res23: scala.actors.Actor = BasicActor@43aad2f4
- scala> b ! Basic("Scala",13)
- Basic Info:Scala:13
- scala> b ! Worker("Spark",7)
- Worker Info:Spark:7
- scala> val a = b !! Worker("Spark",7) --!!:发送完之后,同时希望能够得到结果
- a: b.Future[Any] = <function0>
- scala> Worker Info:Spark:7
- scala> b !? Worker("Spark",7) --一直在等待
- Worker Info:Spark:7
转自:http://blog.csdn.net/gdmzlhj1/article/details/50772942