如何找到可运行等待执行的数量(How to find the number of runnables

2019-10-18 16:02发布

有没有办法知道在当时许多可运行如何等待被执行的给定点ExecutorService 。 例如,假设循环调用execute方法快于可运行能完成和剩余的积累,反正是有得到积累可运行的运行计数?

ExecutorService es = Executors.newFixedThreadPool(50);

while (test) {
    es.execute(new MyRunnable());
}

Answer 1:

有没有办法知道在当时许多可运行如何等待由ExecutorService的执行指定的点。

是。 而不是使用的Executors...呼叫,您应该实例自己ThreadPoolExecutor 。 下面是什么Executors.newFixedThreadPool(50)是返回:

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

一旦你有了ThreadPoolExecutor ,它有一个数量的getter方法 ,让你在泳池数据。 优秀作业的数量应该是:

threadPool.getQueue().getSize();

也可从ThreadPoolExecutor是:

  • getActiveCount()
  • getCompletedTaskCount()
  • getCorePoolSize()
  • getLargestPoolSize()
  • getMaximumPoolSize()
  • getPoolSize()
  • getTaskCount()

如果要限制在队列中的作业数量,这样你就不会得到遥遥领先太多,你应该使用有界BlockingQueueRejectedExecutionHandler 。 看到这里我的答案: 对于HTTP处理大量文件调用Java中



Answer 2:

您可以使用ThreadPoolExecutor实现和调用toString()方法。

返回一个字符串,标识该池,以及它的状态,包括运行状态的指示和估计工人和任务计数。

阅读更多在这里

有在此实现更多的方法,让你不同类型的计数。

您可以使用以下两种方法:

public long getTaskCount()

返回曾经被安排执行任务的大致总数。 因为任务和线程的状态在计算过程中动态地变化,所以返回值只是一个近似值。

public long getCompletedTaskCount()

返回已完成执行任务的大致总数。 因为任务和线程的状态在计算过程中动态地变化,所以返回值只是一个近似值,但一个不跨越过连续调用减少。

干杯!



文章来源: How to find the number of runnables waiting to be executed