【问题标题】:How to check utilization of fixed thread pool [duplicate]如何检查固定线程池的利用率[重复]
【发布时间】:2019-09-14 00:11:34
【问题描述】:

我正在运行一个使用固定线程池的 Java 应用程序,其中线程用于向外部服务发出 HTTP 请求。

线程池被故意过度配置,我想获得一些线程池利用率的测量值(即,此时池中 20% 的线程是空闲的,而此时 30% 的线程是空闲的忙)。

是否有一种有效的方法来检查线程池(通过 Executors.newFixedThreadPool(x) 创建的)当前正在执行任务的比例?

我曾考虑创建一个持续运行 Callable 任务的特殊监视器线程,报告利用率,但我不确定这是否会影响线程池本身的性能(通过使线程响应监视器而不是进行 HTTP 调用)。

【问题讨论】:

标签: java threadpool executorservice


【解决方案1】:

ExecutorService#newFixedThreadPool(int nThreads)返回一个ExecutorService的实例,但是如果你看源码,你会发现他们基本上创建了一个新的ThreadPoolExecutor实例并将其转换为 ExecutorService。

所以你可以这样做:

final int poolSize = 15; // your thread pool size
final ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(poolSize);

在这个 ThreadPoolExecutor 实例上,您可以使用 Javadocs 中的多种方法之一:https://docs.oracle.com/javase/10/docs/api/java/util/concurrent/ThreadPoolExecutor.html#method.summary

仅举几个您可能会觉得有用的例子:
- ThreadPoolExecutor#getActiveCount
- ThreadPoolExecutor#getTaskCount
- ThreadPoolExecutor#getPoolSize

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多