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

LoveMeow:

我有一台使用Java executorService实现的服务器,其中有多个工作线程(即线程池)

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

注意:日志记录不是我的问题,但是我希望能够看到有多少线程正在等待工作线程处理,无论如何,执行者服务中是否有等待队列(不是线程池)的长度? ?

我不知道如何实现这一目标。

塔吉尔·瓦列夫(Tagir Valeev):

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

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

请注意,此方法在ExecutorService界面中不可用,因此最好构造ThreadPoolExecutor显式而不是使用Executors.newFixedThreadPool和朋友:

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

尽管Executors.newFixedThreadPool在OpenJDK / OracleJDK中也这样做,但未指定它,因此使用(ThreadPoolExecutor)Executors.newFixedThreadPool(nThreads)可能会ClassCastException在将来的Java版本或替代的JDK实现中引起。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章