gpt4 book ai didi

java - ThreadPoolExecutor中的 "active threads"是什么意思?

转载 作者:行者123 更新时间:2023-12-03 12:46:29 26 4
gpt4 key购买 nike

我有 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 方法 返回正在执行任务的线程的大概数量。 但这并不能帮助我理解...

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

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

最佳答案

“Activity 线程”是指已开始执行工作队列中任务的线程。

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

要更好地了解实际有多少线程正在运行任务,请定期记录 Activity 线程数,例如每秒 10 次。

关于java - ThreadPoolExecutor中的 "active threads"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63256056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com