scala.actors.scheduler.ExecutorScheduler.scala Maven / Gradle / Ivy
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2005-2013, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
\* */
package scala.actors
package scheduler
import java.util.concurrent.{Callable, ExecutorService}
import scala.concurrent.ThreadPoolRunner
/**
* The ExecutorScheduler
object is used to create
* ExecutorScheduler
instances.
*
* @author Philipp Haller
*/
@deprecated("Use the akka.actor package instead. For migration from the scala.actors package refer to the Actors Migration Guide.", "2.11.0")
object ExecutorScheduler {
private def start(sched: ExecutorScheduler): ExecutorScheduler = {
sched.start()
sched
}
/** Creates an ExecutorScheduler
using the provided
* ExecutorService
.
*
* @param exec the executor to use
* @return the scheduler
*/
def apply(exec: ExecutorService): ExecutorScheduler =
start(new ExecutorScheduler {
val executor: ExecutorService = exec
})
/** Creates an ExecutorScheduler
using the provided
* ExecutorService
.
*
* @param exec the executor to use
* @param term whether the scheduler should automatically terminate
* @return the scheduler
*/
def apply(exec: ExecutorService, term: Boolean): ExecutorScheduler =
start(new ExecutorScheduler {
val executor: ExecutorService = exec
override val terminate = term
})
}
/**
* The ExecutorScheduler
class uses an
* ExecutorService
to execute Actor
s.
*
* @author Philipp Haller
*/
@deprecated("Use the akka.actor package instead. For migration from the scala.actors package refer to the Actors Migration Guide.", "2.11.0")
trait ExecutorScheduler extends Thread
with IScheduler with TerminationService
with ThreadPoolRunner {
def execute(task: Runnable) {
super[ThreadPoolRunner].execute(task.asInstanceOf[Task[Unit]])
}
private class RunCallable(fun: => Unit) extends Callable[Unit] with Runnable {
def call() { fun }
def run() { fun }
}
/** Submits a closure for execution.
*
* @param fun the closure to be executed
*/
override def execute(fun: => Unit) {
super[ThreadPoolRunner].execute((new RunCallable(fun)).asInstanceOf[Task[Unit]])
}
/** This method is called when the scheduler shuts down.
*/
def onShutdown(): Unit =
executor.shutdown()
/** The scheduler is active if the underlying ExecutorService
* has not been shut down.
*/
def isActive =
(executor ne null) && !executor.isShutdown
}