src/Pure/Concurrent/isabelle_thread.scala
changeset 72148 d2dc9bc3a3e1
parent 71717 f871ccd358b3
child 72192 07635a1b6fd2
equal deleted inserted replaced
72147:2375b38a42f8 72148:d2dc9bc3a3e1
    30 
    30 
    31   def make_name(name: String = "", base: String = "thread"): String =
    31   def make_name(name: String = "", base: String = "thread"): String =
    32     "Isabelle." + proper_string(name).getOrElse(base + counter())
    32     "Isabelle." + proper_string(name).getOrElse(base + counter())
    33 
    33 
    34   def current_thread_group: ThreadGroup = Thread.currentThread.getThreadGroup
    34   def current_thread_group: ThreadGroup = Thread.currentThread.getThreadGroup
       
    35 
       
    36   lazy val worker_thread_group: ThreadGroup =
       
    37     new ThreadGroup(current_thread_group, "Isabelle worker")
    35 
    38 
    36   def create(
    39   def create(
    37     main: Runnable,
    40     main: Runnable,
    38     name: String = "",
    41     name: String = "",
    39     group: ThreadGroup = current_thread_group,
    42     group: ThreadGroup = current_thread_group,
    70   {
    73   {
    71     val m = Value.Int.unapply(System.getProperty("isabelle.threads", "0")) getOrElse 0
    74     val m = Value.Int.unapply(System.getProperty("isabelle.threads", "0")) getOrElse 0
    72     val n = if (m > 0) m else (Runtime.getRuntime.availableProcessors max 1) min 8
    75     val n = if (m > 0) m else (Runtime.getRuntime.availableProcessors max 1) min 8
    73     val executor =
    76     val executor =
    74       new ThreadPoolExecutor(n, n, 2500L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue[Runnable])
    77       new ThreadPoolExecutor(n, n, 2500L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue[Runnable])
    75     executor.setThreadFactory(create(_, name = make_name(base = "worker"), group = current_thread_group))
    78     executor.setThreadFactory(
       
    79       create(_, name = make_name(base = "worker"), group = worker_thread_group))
    76     executor
    80     executor
    77   }
    81   }
    78 
    82 
    79 
    83 
    80   /* interrupt handlers */
    84   /* interrupt handlers */