summaryrefslogtreecommitdiff
path: root/src/actors/scala/actors/scheduler/ExecutorScheduler.scala
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2010-03-04 11:40:16 +0000
committerPhilipp Haller <hallerp@gmail.com>2010-03-04 11:40:16 +0000
commitacf89aafe568f76a44ddb0e44ca91f8180d1d825 (patch)
tree3be5818b97dcc2f6930a5dc084864c8f14d08465 /src/actors/scala/actors/scheduler/ExecutorScheduler.scala
parent66509d1f6847c8fa4785bcdfa9bce8f5586e1a0e (diff)
downloadscala-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.scala45
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]])