gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:37 26 4
gpt4 key购买 nike

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

ExecutorService executor = Executors.newSingleThreadExecutor();

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

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

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

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

最佳答案

我认为这应该可行:

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

出于某种原因,虽然它并不总是排除所有已取消的任务,但仅在一些定期清理之后才排除。所以我不得不引入第二个计数器:

    long tasksToDo2 = threadPoolExecutor.getQueue().stream().filter(t -> !((FutureTask) t).isDone()).count();

关于java - 如何在执行程序服务中获取队列中的任务数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46018534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com