有没有办法知道在当时许多可运行如何等待被执行的给定点ExecutorService
。 例如,假设循环调用execute方法快于可运行能完成和剩余的积累,反正是有得到积累可运行的运行计数?
ExecutorService es = Executors.newFixedThreadPool(50);
while (test) {
es.execute(new MyRunnable());
}
有没有办法知道在当时许多可运行如何等待被执行的给定点ExecutorService
。 例如,假设循环调用execute方法快于可运行能完成和剩余的积累,反正是有得到积累可运行的运行计数?
ExecutorService es = Executors.newFixedThreadPool(50);
while (test) {
es.execute(new MyRunnable());
}
有没有办法知道在当时许多可运行如何等待由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()
如果要限制在队列中的作业数量,这样你就不会得到遥遥领先太多,你应该使用有界BlockingQueue
和RejectedExecutionHandler
。 看到这里我的答案: 对于HTTP处理大量文件调用Java中
您可以使用ThreadPoolExecutor
实现和调用toString()
方法。
返回一个字符串,标识该池,以及它的状态,包括运行状态的指示和估计工人和任务计数。
阅读更多在这里
有在此实现更多的方法,让你不同类型的计数。
您可以使用以下两种方法:
public long getTaskCount()
返回曾经被安排执行任务的大致总数。 因为任务和线程的状态在计算过程中动态地变化,所以返回值只是一个近似值。
public long getCompletedTaskCount()
返回已完成执行任务的大致总数。 因为任务和线程的状态在计算过程中动态地变化,所以返回值只是一个近似值,但一个不跨越过连续调用减少。
干杯!