Java 如何查找等待执行的可运行程序的数量

Java 如何查找等待执行的可运行程序的数量,java,concurrency,threadpool,Java,Concurrency,Threadpool,有没有办法知道在给定的时间点有多少可运行程序正在等待ExecutorService执行。例如,假设循环调用execute方法的速度快于runnable可以完成的速度,并且累积了多余的runnable,那么是否仍然可以获得累积的runnable的运行计数 ExecutorService es = Executors.newFixedThreadPool(50); while (test) { es.execute(new MyRunnable()); } 有没有办法知道在给定的时间点有

有没有办法知道在给定的时间点有多少可运行程序正在等待
ExecutorService
执行。例如,假设循环调用execute方法的速度快于runnable可以完成的速度,并且累积了多余的runnable,那么是否仍然可以获得累积的runnable的运行计数

ExecutorService es = Executors.newFixedThreadPool(50);

while (test) {
    es.execute(new MyRunnable());
}
有没有办法知道在给定的时间点有多少可运行程序正在等待ExecutorService执行

对。您应该实例化自己的调用,而不是使用
Executors…
调用。下面是
执行器返回的内容。newFixedThreadPool(50)

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(50, 50,
           0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
也可从
ThreadPoolExecutor
获得:

  • getActiveCount()
  • getCompletedTaskCount()
  • getCorePoolSize()
  • getLargestPoolSize()
  • getMaximumPoolSize()
  • getPoolSize()
  • getTaskCount()
如果要限制队列中作业的数量,以避免遥遥领先,则应使用有界的
BlockingQueue
RejectedExecutionHandler
。请看我的回答:

有没有办法知道在给定的时间点有多少可运行程序正在等待ExecutorService执行

对。您应该实例化自己的调用,而不是使用
Executors…
调用。下面是
执行器返回的内容。newFixedThreadPool(50)

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(50, 50,
           0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
也可从
ThreadPoolExecutor
获得:

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

如果要限制队列中作业的数量,以避免遥遥领先,则应使用有界的
BlockingQueue
RejectedExecutionHandler
。在这里查看我的答案:

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

返回标识此池及其状态的字符串,包括运行状态指示以及估计的工作线程和任务计数

阅读更多

在这个实现中有更多的方法来获得不同类型的计数

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

public long getTaskCount()
返回计划执行的任务的大致总数。由于任务和线程的状态在计算过程中可能会动态变化,因此返回的值只是一个近似值

public long getCompletedTaskCount()
返回已完成执行的任务的大致总数。由于任务和线程的状态在计算过程中可能会动态变化,因此返回的值只是一个近似值,但在连续调用中不会减少


干杯

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

返回标识此池及其状态的字符串,包括运行状态指示以及估计的工作线程和任务计数

阅读更多

在这个实现中有更多的方法来获得不同类型的计数

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

public long getTaskCount()
返回计划执行的任务的大致总数。由于任务和线程的状态在计算过程中可能会动态变化,因此返回的值只是一个近似值

public long getCompletedTaskCount()
返回已完成执行的任务的大致总数。由于任务和线程的状态在计算过程中可能会动态变化,因此返回的值只是一个近似值,但在连续调用中不会减少


干杯

BlockingQueue和RejectedExecutionHandler。。精彩的BlockingQueue和RejectedExecutionHandler。。精彩的