如何在执行程序服务中获取队列中的任务数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在执行程序服务中获取队列中的任务数?相关的知识,希望对你有一定的参考价值。

所以我使用executorservice来创建一个线程池。

ExecutorService executor = Executors.newSingleThreadExecutor();

我试图访问线程池队列中的任务数。我看到没有方法可以做到这一点。我知道有一些方法可以在threadpoolexecutor中获取队列大小,但是如何使用executorservice对象来实现这一点。

就像我说的,如果我创建了像这样的ThreadpoolExecutor,我可以获取队列信息

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

我知道我可以使用tpExecutor.queue.size()来获取threadpool队列中的任务数。但是目前我已经使用Executor Service声明了我的线程池。我怎样才能做到这一点?如果人们可以编写代码并进行演示,那将是值得注意的。

答案

我认为这应该有效:

    ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) this.executorService;
    int activeCount = threadPoolExecutor.getActiveCount();
    long taskCount = threadPoolExecutor.getTaskCount();
    long completedTaskCount = threadPoolExecutor.getCompletedTaskCount();
    long tasksToDo = taskCount - completedTaskCount - activeCount;
另一答案

您可以将其强制转换为ThreadPoolExecutor。

ThreadPoolExecutor ex =(ThreadPoolExecutor)executor; ex.getQueue()大小();

以上是关于如何在执行程序服务中获取队列中的任务数?的主要内容,如果未能解决你的问题,请参考以下文章

AsyncRestTemplate 配置队列大小

如何防止芹菜执行相同的任务?

获取 Google App Engine 任务队列中的任务

Sleep() 方法后的代码片段没有被执行

JAVA线程池

线程池监控