Java corePoolSize=0如何适用于ThreadPoolExecutor?

Java corePoolSize=0如何适用于ThreadPoolExecutor?,java,multithreading,executorservice,threadpoolexecutor,blockingqueue,Java,Multithreading,Executorservice,Threadpoolexecutor,Blockingqueue,ExecutorService.newCachedThreadPool()的定义是 public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,

ExecutorService.newCachedThreadPool()的定义是

public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                  60L, TimeUnit.SECONDS,
                                  new SynchronousQueue<Runnable>(),
                                  threadFactory);
}
公共静态执行器服务newCachedThreadPool(ThreadFactory ThreadFactory){
返回新的ThreadPoolExecutor(0,Integer.MAX_值,
60升,时间单位。秒,
新建SynchronousQueue(),
螺纹加工厂);
}
它正在创建一个池,其中包含
corePoolSize=0
maximumPoolSize=Integer.MAX_VALUE
和一个无界队列

但是,在for
ThreadPoolExecutor
中,它表示:

在方法execute(java.lang.Runnable)中提交新任务时,如果运行的线程少于corePoolSize,则会创建一个新线程来处理该请求,即使其他工作线程处于空闲状态如果运行的线程超过corePoolSize但小于maximumPoolSize,则仅当队列已满时才会创建新线程

那么在这种情况下,
corePoolSize=0
是如何工作的呢?最初,有0个线程,所以虽然文档中没有说明,但我假设它将为提交的第一个任务创建一个新线程。但是,现在我们有了1个thread>corePoolSize=0,1个thread 所以没有新的线程会被创建,我们只能使用一个线程

不是真的

请注意
newCachedThreadPool
使用:

一种阻塞队列,其中每个插入操作必须等待 另一个线程执行相应的删除操作,反之亦然。A. 同步队列没有任何内部容量,甚至没有 一个的容量

这意味着

  • 如果有空闲工作线程试图获取队列的任务,则该任务将被成功地放入队列,并立即由该空闲线程执行

  • 否则,此任务无法放入队列,换句话说,队列已满。然后将创建新线程来执行任务


您能否解释
ThreadPoolExecutor
LinkedBlockingQueue
corePoolSize=0
的行为。根据文件,它不起作用。看看这个。