--- a/src/Pure/Concurrent/simple_thread.scala Thu Dec 11 15:24:28 2014 +0100
+++ b/src/Pure/Concurrent/simple_thread.scala Thu Dec 11 23:31:30 2014 +0100
@@ -9,9 +9,8 @@
import java.lang.Thread
-import java.util.concurrent.{Callable, Future => JFuture}
-
-import scala.collection.parallel.ForkJoinTasks
+import java.util.concurrent.{Callable, Future => JFuture, ThreadPoolExecutor,
+ TimeUnit, LinkedBlockingQueue}
object Simple_Thread
@@ -41,7 +40,12 @@
/* thread pool */
- lazy val default_pool = ForkJoinTasks.defaultForkJoinPool
+ lazy val default_pool =
+ {
+ val m = Properties.Value.Int.unapply(System.getProperty("isabelle.threads", "0")) getOrElse 0
+ val n = if (m > 0) m else (Runtime.getRuntime.availableProcessors max 1) min 8
+ new ThreadPoolExecutor(n, n, 2500L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue[Runnable])
+ }
def submit_task[A](body: => A): JFuture[A] =
default_pool.submit(new Callable[A] { def call = body })