📄 jobcoordinator.scala
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -