summaryrefslogtreecommitdiff
path: root/test/files/jvm/actor-executor.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 /test/files/jvm/actor-executor.scala
parent66509d1f6847c8fa4785bcdfa9bce8f5586e1a0e (diff)
downloadscala-acf89aafe568f76a44ddb0e44ca91f8180d1d825.tar.gz
scala-acf89aafe568f76a44ddb0e44ca91f8180d1d825.tar.bz2
scala-acf89aafe568f76a44ddb0e44ca91f8180d1d825.zip
Clean-ups in scheduler hierarchy.
Diffstat (limited to 'test/files/jvm/actor-executor.scala')
-rw-r--r--test/files/jvm/actor-executor.scala59
1 files changed, 59 insertions, 0 deletions
diff --git a/test/files/jvm/actor-executor.scala b/test/files/jvm/actor-executor.scala
new file mode 100644
index 0000000000..e650043382
--- /dev/null
+++ b/test/files/jvm/actor-executor.scala
@@ -0,0 +1,59 @@
+import java.util.concurrent.Executors
+import scala.actors.{Actor, SchedulerAdapter}
+import Actor._
+
+trait AdaptedActor extends Actor {
+ override def scheduler =
+ Test.scheduler
+}
+
+object One extends AdaptedActor {
+ def act() {
+ Two.start()
+ var i = 0
+ loopWhile (i < 10000) {
+ i += 1
+ Two ! 'MsgForTwo
+ react {
+ case 'MsgForOne =>
+ if (i % 1000 == 0)
+ println("One: OK")
+ if (i == 10000)
+ Test.executor.shutdown()
+ }
+ }
+ }
+}
+
+object Two extends AdaptedActor {
+ def act() {
+ var i = 0
+ loopWhile (i < 10000) {
+ i += 1
+ react {
+ case 'MsgForTwo =>
+ if (i % 1000 == 0)
+ println("Two: OK")
+ One ! 'MsgForOne
+ }
+ }
+ }
+}
+
+object Test {
+ val executor =
+ Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
+
+ val scheduler =
+ new SchedulerAdapter {
+ def execute(block: => Unit) {
+ executor.execute(new Runnable {
+ def run() { block }
+ })
+ }
+ }
+
+ def main(args: Array[String]) {
+ One.start()
+ }
+}