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

ThreadPoolExecutor新线程

武元白
2023-03-14

以下是Sun创建线程的简单规则:

  1. 如果线程数小于corePoolSize,请创建新线程以运行新任务

为什么在队列已满时创建非核心线程?我不明白他们为什么这样做。为什么不在队列为空时创建非核心线程?

共有1个答案

曹旭东
2023-03-14

为什么要在队列已满时创建非核心线程?

如果队列未满,则核心线程能够满足服务需求。它们不需要额外线程的帮助,因此系统不应该创建额外线程。

如果队列已满,则表明核心线程不足以处理传入的请求。线程池试图通过创建新线程来缓解这种情况。

 类似资料:
  • 我正在尝试创建一个具有一定数量线程的ThreadPoolExector,但同时,我想控制池队列的大小。所以我使用完整的构造函数创建了执行器: 然而,这给了我一个非法辩论例外。如果我将构造函数更改为 它起作用了。如果我希望理想的线程数和最大线程数相同,为什么它不起作用呢。

  • 问题内容: 我无法创建新线程。实际上,我编写了一个有点黑的程序,可以接受任何任务(即,它是不受限制的),但是调用了一个附加处理程序- 在我的应用程序中,它会发出警告跟踪表明该池已落后-这为我提供了TPE拒绝创建的非常明确的信息新队列,即使队列中有成千上万的条目。我的构造函数如下: 为什么不创建新线程? 问题答案: 此博客文章介绍了这一难题: 这种线程池的构造根本无法按预期工作。这是由于Thread

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

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

  • 主要内容:1 核心线程预启动,1.1 prestartCoreThread启动一条,1.2 prestartAllCoreThreads启动全部,2 关闭线程池,2.1 shutdown温和停止,2.2 shutdownNow立即停止,3 hook钩子方法,4 线程池信息获取,4.1 awaitTermination等待终止,4.2 getTaskCount计划任务数量,4.3 getActiveCount工作线程数量,,,,,,,,,,,前面的文章中,我们介绍了ThreadPoolExecut

  • 问题内容: 我正在尝试同时使用和。 由于每个池(毕竟是一个池)都将线程重用,这意味着无法正常工作,因此出现了故障。现在这个问题对我来说似乎很明显,但要追踪它尤为困难。 我这样使用,以便几个顶级进程中的每个进程都有自己的数据库连接以及它产生的任何子进程。我不只是使用一个共享的连接池,因为在提交数据库和/或准备大量重复使用的PreparedStatement之前,每个顶级进程都会对其连接进行很多多步骤