有什么方法可以知道在给定的时间点有多少可运行对象等待由ExecutorService
. 例如,假设循环调用execute方法的速度比runnable完成的速度快,并且累积了盈余,那么无论如何要获得累积的runnables的运行计数吗?
ExecutorService es = Executors.newFixedThreadPool(50);
while (test) {
es.execute(new MyRunnable());
}
有什么方法可以知道在给定的时间点有多少可运行对象等待由ExecutorService
. 例如,假设循环调用execute方法的速度比runnable完成的速度快,并且累积了盈余,那么无论如何要获得累积的runnables的运行计数吗?
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
. 在这里查看我的答案:Process Large File for HTTP Calls in Java
您可以使用ThreadPoolExecutor
实现和调用toString()
方法。
返回标识此池的字符串及其状态,包括运行状态指示以及估计的工作人员和任务计数。
在这里阅读更多
此实现中有更多方法可以为您提供不同类型的计数。
您可以使用以下两种方法:
public long getTaskCount()
返回已安排执行的任务的大致总数。因为任务和线程的状态在计算过程中可能会动态变化,所以返回的值只是一个近似值。
public long getCompletedTaskCount()
返回已完成执行的大致任务总数。因为任务和线程的状态在计算过程中可能会动态变化,所以返回的值只是一个近似值,但不会随着连续调用而减少。
干杯!!