代码之家  ›  专栏  ›  技术社区  ›  Mandroid

在Scala中使用ForkJoinPool

  •  1
  • Mandroid  · 技术社区  · 7 年前

    In代码:

    val executor = new ForkJoinPool()
    executor.execute(new Runnable{
      def run = println("This task is run asynchronously")
    })
    Thread.sleep(10000)
    

    此代码打印:此任务异步运行

    但如果我去掉线。睡眠(10000),程序不打印。 然后我了解到这是因为睡眠可以防止ForkJoinPool中的守护进程线程在调用Runnable对象上的run方法之前被终止。

    因此,有几个问题:

    1. 这是否意味着由ForkJoinPool启动的线程都是守护进程线程?为什么会这样?
    2. 睡眠对这里有什么帮助?
    1 回复  |  直到 7 年前
        1
  •  2
  •   jkinkead    7 年前

    答案:

    1. 是的,因为您使用的是默认线程工厂,这就是它的配置方式。如果愿意,可以为其提供自定义线程工厂,并且可以将线程配置为非守护进程。

    2. 睡眠有助于防止程序退出足够长的时间,以使线程池线程能够找到并执行任务。