ExecutorService.newCachedThreadPool()的定义是

public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                  60L, TimeUnit.SECONDS,
                                  new SynchronousQueue<Runnable>(),
                                  threadFactory);
}

它使用corePoolSize = 0maximumPoolSize = Integer.MAX_VALUE和无限制队列创建一个池。

但是在docThreadPoolExecutor中,它说:



那么在这种情况下corePoolSize = 0如何工作?最初有0个线程,因此尽管在文档中没有说明,但我认为它将为提交的第一个任务创建一个新线程。但是,现在,根据上面的文档,“我们只有1个线程> corePoolSize = 0,有1个线程

最佳答案



并不真地。

请注意newCachedThreadPool使用 SynchronousQueue :



这表示

  • 如果有空闲的工作线程试图为队列获取任务,则该任务将被成功地放入队列,并由该空闲线程立即处理并执行。
  • 否则,此任务不能放入队列,换句话说,队列已满。然后将创建新线程以执行任务
  • 09-30 19:58