Остановите актеров Scala, когда они простаивают
Я использую актеров, чтобы распараллелить некоторые работы. Я создаю список актеров и отправляю им сообщения случайным образом.
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)
}
}
}
Если я запускаю этот код, приложение будет работать вечно, пока я не заставлю его выйти. Я хочу, чтобы приложение остановилось после того, как все сообщения были обработаны группой актеров. Есть ли способ обнаружить, что все участники не работают в течение некоторого времени, и закончить приложение?