jobcoordinator.scala
来自「resetful样式的ws样例,一种面向资源的webservices服务」· SCALA 代码 · 共 67 行
SCALA
67 行
import scala.actors.Actorimport scala.actors.Actor._import scala.actors.OutputChannelimport scala.collection.mutable.Stackpackage com.sun.jersey.samples.mandel {class JobCoordinator(n: int) { trait Job { def execute: unit } private case object FinishedProducing private case object Completed private def worker = actor { loop { react { case j: Job => j.execute sender ! Completed case Completed => exit } } } val coordinator = actor { var finisher: OutputChannel[Any] = null val workers = new Stack[OutputChannel[Any]] val jobs = new Stack[Job] for (i <- 0 to n - 1) workers += worker loop { react { case j: Job => if (!workers.isEmpty) (workers pop) ! j else jobs += j case FinishedProducing => finisher = sender case Completed => if (!jobs.isEmpty) sender ! (jobs pop) else workers += sender if (workers.size == n && finisher != null) { workers foreach (x => x ! Completed) finisher ! Completed exit } }} } def job (j: => unit) : unit = { coordinator ! new Job { def execute = j } } def ! (j : Job) : unit = { coordinator ! j } def waitForCompletion: unit = { coordinator !? FinishedProducing match { case Completed => } }}} // package
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?