【发布时间】:2020-11-25 02:11:33
【问题描述】:
我有下一个参数的 ThreadPoolExecutor:
corePoolSize = 20
maximumPoolSize = 100
workQueue = new LinkedBlockingQueue(10)
我每秒提交 1k 个任务。任务代表一些需要 1-2 秒的 IO 操作。他们中的一些人被拒绝了。这是预期的。 我使用自定义 AbortPolicy 在拒绝之前记录线程池状态。
在日志中我看到了一些我无法解释的东西。像这样的消息:
java.util.concurrent.ThreadPoolExecutor@3e6be2d8[正在运行,池大小 = 100,活动线程 = 2,排队任务 = 10,已完成任务 = 4471827]。
我在文档中发现 getActiveCount 方法 Returns the approximate number of threads that are actively executing tasks. 但这并不能帮助我理解......
这里的“活动线程”是什么意思?为什么只有 2 个线程处于活动状态,而池已达到其限制,队列已满而任务被拒绝?
我想增加maximumPoolSize一次处理更多的任务,但首先我需要了解我是否有效地使用了线程池资源。
【问题讨论】:
标签: java multithreading concurrency threadpool threadpoolexecutor