您的位置:首页 > 其它

Code Examples for scala actor link

2015-09-25 20:37 267 查看
package test.scala.lang.actor

import scala.actors.Actor
import scala.actors.Exit

object TestActorLink {

def main(args: Array[String]): Unit = {
//testReact
testLink
}

def testLink = {
val master = new MActor
master.start()

val slave = new SActor(master)
slave.start()

Thread.sleep(3000)
master ! "test"
master ! 4
master ! "test"

slave ! "test"
slave ! 4
slave ! "test"
}

def testReact = {
val t = new TActor
t.start()

Thread.sleep(3000)
t ! 4
t ! "test"
}

}

class MActor extends Actor {
def act() {
println("master actor start...")
loop {
react({
case x: String => {
println("MActor: " + x)
println("MActor: goodbye guys")
exit("game over, haha!") //非Normal原因终止
//exit //Normal原因终止
}
case o => println(o)
})
}
}
}

/**
* Terminates execution of self with the following effect on linked actors:
* For each linked actor a with trapExit set to true, send message Exit(self, reason) to a.
* For each linked actor a with trapExit set to false (default), call a.exit(reason) if reason != 'normal.
*/
class SActor(master: Actor) extends Actor {
def act(){
println("slave actor start...")
trapExit = true
link(master)//当前Actor链接到的Actor如果以非Normal原因终止,则该Actor也终止。
loop {
react({
case Exit(master, reason) => {
println(s"---[$master] game over by [$reason]---")
println(s"SActor say: why are you so diao, [$master] ?")
exit
}
case x => {
println("SActor say: " + x)
}
})
}
}
}

class TActor extends Actor {
def act() {
println("act start...")
while (true) {
react({
case x: String => println(x)
})
}
}
}


http://booksites.artima.com/actors_in_scala/examples/html/ch06.html#sec2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: