当他们闲置时停止Scala演员

时间:2014-02-25 20:26:06

标签: scala actor

我正在使用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组处理后停止。有没有办法检测所有演员都没有工作一段时间然后完成申请?

0 个答案:

没有答案