1

在代码中:

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. 睡眠在这里有什么帮助?
4

1 回答 1

2

答案:

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

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

于 2018-04-15T05:48:45.000 回答