猿问

corePoolSize=0 如何为 ThreadPoolExecutor 工作?

的定义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和一个无界队列。


但是在它的文档中ThreadPoolExecutor说:


当在方法 execute(java.lang.Runnable) 中提交新任务,并且运行的线程少于 corePoolSize 时,即使其他工作线程空闲,也会创建一个新线程来处理请求。如果运行的线程多于 corePoolSize 但少于 maximumPoolSize ,则只有在队列已满时才会创建新线程。


那么corePoolSize = 0在这种情况下如何工作?最初,有 0 个线程,所以虽然它在文档中没有说,但我认为它会为提交的第一个任务创建一个新线程。但是,现在我们有 1 个线程 > corePoolSize = 0,和 1 个线程 < maximumPoolSize = Integer.MAX_VALUE,根据上面的文档“只有当队列已满时才会创建一个新线程”,但是队列是无界的永远不会创建新线程,而我们只能使用 1 个线程?


拉风的咖菲猫
浏览 873回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答