在Scala中使用ForkJoinPool

时间:2018-04-15 05:33:47

标签: scala sleep forkjoinpool

在代码中:

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

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

但是如果我删除Thread.sleep(10000),则程序不会打印。 然后我了解到它是因为sleep会阻止ForkJoinPool中的守护进程线程在它们在Runnable对象上调用run方法之前被终止。

所以,几乎没有问题:

  1. 是否意味着ForkJoinPool启动的线程都是守护线程?为什么会这样?
  2. 睡眠如何帮助?

1 个答案:

答案 0 :(得分:2)

数目:

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

  2. 睡眠有帮助,因为它可以防止程序退出足够长的时间,让线程池线程找到你的任务并执行它。