java - 具有运行任务数的 ExecutorService

标签 java executorservice threadpoolexecutor

我想获取已提交给执行程序服务但尚未完成(即当前正在运行/Activity 或排队)的任务数。执行器服务没有为此内置的方法。

((ThreadPoolExecutor) executorService).getActiveCount()

这“返回正在执行任务的线程的大概数量。”

这是维护可变计数器的有效替代方法吗? 为什么是近似值? 我真的会更好地维护柜台吗? 为什么执行器服务没有为此内置的方法?

最佳答案

让我们看一下这个任务:只有停止系统、计数、返回、启动系统,才能告诉你确切的数字。 否则:在计数期间,线程可能会开始和结束,因此该数字是一个近似值。

查看 OpenJDK8 中的实现:

1812    public int More ...getActiveCount() {
1813        final ReentrantLock mainLock = this.mainLock;
1814        mainLock.lock();
1815        try {
1816            int n = 0;
1817            for (Worker w : workers)
1818                if (w.isLocked())
1819                    ++n;
1820            return n;
1821        } finally {
1822            mainLock.unlock();
1823        }
1824    }

实现很简单,但这就像数 Ant 而不杀死它们:你数的时候它们会来来去去。

关于java - 具有运行任务数的 ExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304851/

相关文章:

java - 通过hibernate动态创建和切换数据库

Java - 堆与直接内存访问

java - 多线程环境中的基准测试

java - 有没有办法指定使用 Quartz 库运行任务的持续时间

java - 为什么 slf4j 记录器有时会打印出父线程,即使代码应该由子线程执行?

java - 修复线程池: pause until thread available?

java - 为什么 RGBA 位图需要 3x3 数组来存储 1 个像素,如何避免这种情况?

java - Selenium 上传文件 : file not found [docker]

java - 需要一个 Java 方法的解决方案,该方法返回一个字符串值,以便在 JVM 中仅执行 n 个线程

java - ScheduledExecutorService 任务阻塞时间超过其运行间隔