具有正在运行的任务数的执行器服务



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

((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    }

实现很简单,但就像数蚂蚁而不杀死它们一样:当你数数时,它们会来来去去。

相关内容

  • 没有找到相关文章

最新更新