我正在使用 ThreadPoolExecutor
和 corePoolSize
= maxPoolSize
= queueSize
= 15
每个传入请求都会生成 7 个任务,并使用该线程池执行。
即使每个单独的任务在被安排时花费的时间不到 3 秒,但整个请求花费的时间要长得多。
我怀疑系统缺少线程和正在排队的任务。
我为每个传入请求记录了以下信息。
getActiveCount()
getLargestPoolSize()
getPoolSize()
getQueue().size()
我注意到系统并没有缺少线程。
getPoolSize
和 getLargestPoolSize
值始终为 15 - 这符合预期。
getQueue().size()
始终为 0 - 因此没有任务排队。
getActiveCount()
值始终在 1-2 之间。
为什么池中的其他线程不工作?
是“getActiveCount()
- 返回正在执行任务的线程的大概数量。”使用正确的 API?
最佳答案
正如@Thomas 所建议的那样,池正在根据需要创建线程,因此如果您只给池一次执行 1-2 个任务,它只会有 1-2 个线程处于 Activity 状态。如果你想让它更忙,你需要一次给它提供更多的任务。
关于java - threadpoolexcecutor线程池中很少有线程主动执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765060/