的定义
ExecutorService.newCachedThreadPool()
public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(),
threadFactory);
}
它正在创建一个游泳池
corePoolSize = 0
maximumPoolSize = Integer.MAX_VALUE
还有一个无界队列。
但是在
doc
对于
ThreadPoolExecutor
在方法execute中提交新任务时(java.lang.Runnable),并且运行的线程少于corePoolSize,则会创建一个新线程来处理该请求,即使其他工作线程处于空闲状态。
如果运行的线程多于corePoolSize,但少于maximumPoolSize,则仅当队列已满时才会创建新线程
.
那你怎么办
核心池大小=0
在这种情况下工作?最初,有0个线程,所以尽管文档中没有说明,但我假设它将为提交的第一个任务创建一个新线程。但是,现在我们有了1个线程>corePoolSize=0和1个线程<maximumPoolSize=Integer.MAX\u值,根据上面的文档“只有当队列已满时才会创建一个新线程”,但是队列是无限的,所以不会创建新线程,我们只能使用一个线程?