当前位置: 首页 > 知识库问答 >
问题:

对于ThreadPoolExecutor,CorePoolSize=0如何工作?

姬温文
2023-03-14

executorservice.newcachedthreadpool()的定义为

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

共有1个答案

徐星阑
2023-03-14

所以不会创建新的线程,我们只能用1个线程?

不是真的。

请注意NewCachedThreadPool使用SynchronousQueue:

>

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

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

  •  类似资料:
    • 问题内容: 我试图了解ThreadPoolExecutor类。我已经阅读了这个答案和Javadoc。但是我的实验与该描述不符: 我用一个用于跟踪ID的工厂初始化线程池 然后的任务: 并为按钮分配操作: 但是我向该按钮发送了垃圾邮件,并且从不创建第三个线程,因此ThreadPoolExecutor构造函数()中的第二个参数是什么。我希望在执行结束1分钟后创建4个线程,并杀死其中2个线程 问题答案:

    • 我在练习Java并发性时,被困在了8.3.1线程创建和拆卸主题上。下面的脚注警告要将corePoolSize保持为零。 开发人员有时会倾向于将核心大小设置为零,这样工作线程最终会被拆除,因此不会阻止JVM退出,但这可能会在不使用同步队列的线程池中导致一些看似奇怪的行为。工作队列(如newCachedThreadPool所做的那样)。如果池已经达到核心大小,则ThreadPoolExector仅在工

    • 问题内容: 继续我提出的问题,我试图在我的代码库中使用ThreadPoolExecutor。即使反复尝试从Java API文档中理解,我也无法清楚地理解keepAliveTime要在构造函数中传递的参数的功能/目的。希望有人可以通过一些很好的例子向我解释。 Java文档摘录: keepAliveTime-当线程数大于内核数时,这是多余的空闲线程将在终止之前等待新任务的最长时间。 问题答案: 假设您

    • java.util.concurrent.ThreadPoolExecutor是一个ExecutorService,它使用可能的几个池化线程之一执行每个提交的任务,通常使用Executors工厂方法配置。 它还提供各种实用程序方法来检查当前线程统计信息并控制它们。 ThreadPoolExecutor方法 Sr.No. 方法和描述 1 protected void afterExecute(Run

    • 问题内容: 我的问题: 如何在a上执行一堆线程对象并等待它们全部完成后再继续? 我是ThreadPoolExecutor的新手。因此,此代码是测试以了解其工作方式。现在我什至都不用对象填充,因为我不理解如何在不调用另一个队列的情况下开始队列。无论如何,现在我只是打电话给我,但我认为我仍然缺少一些东西。任何提示都很棒!谢谢。 RunnableObject类: 问题答案: 你应该循环

    • 我读到有一个线程池,这个池注定要减少创建新线程的成本(至少我这样理解下面的短语): 当您向执行程序发送任务时,它会尝试使用一个池线程来执行此任务,以避免线程的持续生成。[Java7并发Cookbook] 但是,我知道我们没有办法在Java重启线程。 问题:ThreadPoolExecutor如何避免创建新线程?