diff options
author | Philipp Haller <hallerp@gmail.com> | 2010-03-04 11:40:16 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2010-03-04 11:40:16 +0000 |
commit | acf89aafe568f76a44ddb0e44ca91f8180d1d825 (patch) | |
tree | 3be5818b97dcc2f6930a5dc084864c8f14d08465 /src/actors/scala/actors/scheduler/ExecutorScheduler.scala | |
parent | 66509d1f6847c8fa4785bcdfa9bce8f5586e1a0e (diff) | |
download | scala-acf89aafe568f76a44ddb0e44ca91f8180d1d825.tar.gz scala-acf89aafe568f76a44ddb0e44ca91f8180d1d825.tar.bz2 scala-acf89aafe568f76a44ddb0e44ca91f8180d1d825.zip |
Clean-ups in scheduler hierarchy.
Diffstat (limited to 'src/actors/scala/actors/scheduler/ExecutorScheduler.scala')
-rw-r--r-- | src/actors/scala/actors/scheduler/ExecutorScheduler.scala | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/src/actors/scala/actors/scheduler/ExecutorScheduler.scala b/src/actors/scala/actors/scheduler/ExecutorScheduler.scala index bcd524f345..4b5eec21d9 100644 --- a/src/actors/scala/actors/scheduler/ExecutorScheduler.scala +++ b/src/actors/scala/actors/scheduler/ExecutorScheduler.scala @@ -11,16 +11,57 @@ package scala.actors package scheduler -import java.util.concurrent.Callable +import java.util.concurrent.{Callable, ExecutorService} import scala.concurrent.ThreadPoolRunner /** + * The <code>ExecutorScheduler</code> object is used to create + * <code>ExecutorScheduler</code> instances. + * + * @author Philipp Haller + */ +object ExecutorScheduler { + + private def start(sched: ExecutorScheduler): ExecutorScheduler = { + sched.start() + sched + } + + /** Creates an <code>ExecutorScheduler</code> using the provided + * <code>ExecutorService</code>. + * + * @param exec the executor to use + * @return the scheduler + */ + def apply(exec: ExecutorService): ExecutorScheduler = + start(new ExecutorScheduler { + def executor: ExecutorService = exec + }) + + /** Creates an <code>ExecutorScheduler</code> using the provided + * <code>ExecutorService</code>. + * + * @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 { + def executor: ExecutorService = exec + override val terminate = term + }) + +} + +/** * The <code>ExecutorScheduler</code> class uses an * <code>ExecutorService</code> to execute <code>Actor</code>s. * * @author Philipp Haller */ -private[scheduler] trait ExecutorScheduler extends IScheduler with ThreadPoolRunner { +trait ExecutorScheduler extends Thread + with IScheduler with TerminationService + with ThreadPoolRunner { def execute(task: Runnable) { super[ThreadPoolRunner].execute(task.asInstanceOf[Task[Unit]]) |