我正在使用actor来并行化一些工作。我正在创建一个演员列表并随机向他们发送消息。
val actors = Range(1, threads + 1).map(_ => new MyActor)
actors.foreach(a => a.start)
val messages: List[String] = getMessages()
messages.foreach { m =>
actors((Math.random() * actors.size).toInt) ! m
}
actors.foreach(_ ! "KILLME")
var exit = false
while (!exit) {
Thread.sleep(1000L)
exit = actors.foldLeft(true) { (ac, imp) =>
ac && (imp.getState.toString == "Terminated")
}
}
这是演员代码:
def act {
while (true) {
receive {
case "KILLME" => return
case m: String => doSomeComplexThingWith(m)
}
}
}
如果我运行此代码,应用程序将永远运行,直到我强制退出它。我希望应用程序在所有消息由actor组处理后停止。有没有办法检测所有演员都没有工作一段时间然后完成申请?