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 + -
显示快捷键?