gpt4 book ai didi

java - 从执行程序服务池(JAVA)中查找等待线程的作业数?

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:25 24 4
gpt4 key购买 nike

我有一个服务器,它有多个使用 java executorService 实现的工作线程(即线程池)

我的问题是,如果线程池中没有可用的空闲线程,我无法每秒记录等待处理的作业长度。

注意:日志记录不是我的问题,但我希望能够看到有多少任务/作业正在等待工作线程处理,是否可以查看等待队列的长度(不是线程池)内部执行服务?

我不知道如何实现这个东西。

最佳答案

ThreadPoolExecutor 构造函数接受一个 BlockingQueue 参数,它是用于存储等待作业的 Queue 实现。您可以使用 getQueue() 方法请求此队列,然后检查队列的大小:

System.out.println("Number of waiting jobs: "+executor.getQueue().size());

请注意,此方法在 ExecutorService 接口(interface)中不可用,因此最好显式构造 ThreadPoolExecutor 而不是使用 Executors.newFixedThreadPool和 friend :

ThreadPoolExecutor executor = new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());

虽然 OpenJDK/OracleJDK 中的 Executors.newFixedThreadPool 做同样的事情,但没有指定,因此使用 (ThreadPoolExecutor)Executors.newFixedThreadPool(nThreads) 可能会导致 ClassCastException 在未来的 Java 版本或替代的 JDK 实现中。

关于java - 从执行程序服务池(JAVA)中查找等待线程的作业数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33343674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com