Leo*_*Leo 2 java executorservice threadpool
我正在运行一个使用固定线程池的 Java 应用程序,其中线程用于向外部服务发出 HTTP 请求。
线程池被故意过度配置,我想获得一些线程池利用率的测量结果(即,此时池中 20% 的线程空闲,而此时 30% 的线程忙碌)。
是否有一种有效的方法来检查线程池(通过 Executors.newFixedThreadPool(x) 创建)当前正在执行任务的比例?
我曾考虑过创建一个特殊的监视器线程来持续运行可调用任务,报告利用率,但我不确定这是否会影响线程池本身的性能(通过使线程响应监视器而不是进行 HTTP 调用) )。
ExecutorService#newFixedThreadPool(int nThreads)返回 ExecutorService 的实例,但是如果您查看源代码,您会发现它们基本上创建了ThreadPoolExecutor的新实例并将其转换为 ExecutorService。
所以你可以这样做:
final int poolSize = 15; // your thread pool size
final ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(poolSize);
Run Code Online (Sandbox Code Playgroud)
在此 ThreadPoolExecutor 实例上,您可以使用 Javadocs 中可以找到的多种方法之一:https: //docs.oracle.com/javase/10/docs/api/java/util/concurrent/ThreadPoolExecutor.html#method。概括
仅举几个您可能会觉得有用的:
- ThreadPoolExecutor#getActiveCount
- ThreadPoolExecutor#getTaskCount
- ThreadPoolExecutor#getPoolSize