import scala.actors.Actor._
object Actor1 extends Application {
val caller = self
val badActor = actor {
receive {
case msg =>
println(msg)
caller ! "bbbb"
}
}
badActor ! "aaaa"
receive {
case a : String => println(a)
}
}
为什么在输出"aaaa"就没有继续执行了呢?
debug时suspend线程可以看到阻塞在caller ! "bbbb"这一行了,如果用sender的话就没问题 而且sender和caller确实是同一个对象……
运行环境是eclipse+scala插件,当作脚本运行这段代码是可以的。
有人遇到这样的情况吗?怎么解决啊?
Java本身的进程之间共享的特点决定了。
注意最后一段,主进程被混入了Actor,然后和badActor进行通信。
也就是说,你通过actor {}方式构建的是依赖于当前进程环境下的actor,而new Actor则创建了一条新的线程。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。