java - threadpoolexcecutor线程池中很少有线程主动执行任务

标签 java multithreading

我正在使用 ThreadPoolExecutorcorePoolSize = maxPoolSize = queueSize = 15

每个传入请求都会生成 7 个任务,并使用该线程池执行。

即使每个单独的任务在被安排时花费的时间不到 3 秒,但整个请求花费的时间要长得多。

我怀疑系统缺少线程和正在排队的任务。

我为每个传入请求记录了以下信息。

getActiveCount()
getLargestPoolSize()
getPoolSize()
getQueue().size()

我注意到系统并没有缺少线程。

getPoolSizegetLargestPoolSize 值始终为 15 - 这符合预期。

getQueue().size() 始终为 0 - 因此没有任务排队。

getActiveCount() 值始终在 1-2 之间。

为什么池中的其他线程不工作?

是“getActiveCount() - 返回正在执行任务的线程的大概数量。”使用正确的 API?

最佳答案

正如@Thomas 所建议的那样,池正在根据需要创建线程,因此如果您只给池一次执行 1-2 个任务,它只会有 1-2 个线程处于 Activity 状态。如果你想让它更忙,你需要一次给它提供更多的任务。

关于java - threadpoolexcecutor线程池中很少有线程主动执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765060/

相关文章:

Java将Html转换为图像

java - 如何解决 FileSizeLimitExceededException 错误?

c++ - 安全地完成读取操作 (Boost.Asio)

c# - 在多线程应用程序中共享 IEnumerable<T> 和 IQueryable<T>

c - Teamcenter ITK 中的多线程

iphone - 在 Core Data 的后台线程上使用获取请求

java - 如何模拟 jdbcTemplate.execute(callableStatementCreator, callableStatementCallback);

java - 如何使用 apache commons cli 指定多个选项?

java - Java 8 中 List 的 Comparator.comparing 中的链式方法

c++ - 头文件中定义的线程函数给​​出类型转换错误