开发者社区> 问答> 正文

使用scala actor时遇到的一个问题~

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插件,当作脚本运行这段代码是可以的。

有人遇到这样的情况吗?怎么解决啊?

展开
收起
爵霸 2016-06-17 09:19:29 2508 0
1 条回答
写回答
取消 提交回答
  • Java本身的进程之间共享的特点决定了。

    注意最后一段,主进程被混入了Actor,然后和badActor进行通信。

    也就是说,你通过actor {}方式构建的是依赖于当前进程环境下的actor,而new Actor则创建了一条新的线程。

    2019-07-17 19:42:01
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JDK8新特性与生产-for“华东地区scala爱好者聚会” 立即下载
Just Enough Scala for Spark 立即下载
From Python Scikit learn to Scala Spark 立即下载