"active threads"在ThreadPoolExecutor中是什么意思?

What does "active threads" mean in ThreadPoolExecutor?

我有 ThreadPoolExecutor 和下一个参数:

corePoolSize = 20
maximumPoolSize = 100
workQueue = new LinkedBlockingQueue(10)

我每秒提交 1k 个任务。任务代表一些需要 1-2 秒的 IO 操作。他们中的一些人被拒绝了。这是预期的。 我在使用自定义 AbortPolicy 拒绝之前记录了线程池状态。

在日志中,我看到了无法解释的内容。消息如:

java.util.concurrent.ThreadPoolExecutor@3e6be2d8[Running, pool size = 100, active threads = 2, queued tasks = 10, completed tasks = 4471827].

我在文档中发现 getActiveCount 方法 Returns the approximate number of threads that are actively executing tasks. 但它并不能帮助我理解...

这里的“活动线程”是什么意思?为什么只有 2 个线程处于活动状态,而池已达到其限制,队列已满且任务被拒绝?

我想增加 maximumPoolSize 一次处理更多的任务,但首先我需要了解我是否有效地使用线程池资源。

“活动线程”表示已开始执行工作队列中任务的线程。

当线程启动或空闲时,它们不会“立即”执行任务 - 存在从队列中读取的争用。如果你在一个紧密的循环中向执行器提交 100 个任务,很可能到最后只有少数工作线程有机会接受一个任务。

为了更好地了解有多少线程实际上是 运行 任务,请定期记录活动线程数,例如每秒 10 次。