diff -r 580de802aafd -r c2b23cb8a677 src/Pure/Concurrent/simple_thread.scala --- 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 })