ThreadPoolExecutor#getActiveCount()的Javadocs表示方法“返回正在主动执行任务的线程的大约数量”。

是什么使这个数字近似而不是精确?它会报告 Activity 线程过多还是报告不足?

方法如下:

/**
 * Returns the approximate number of threads that are actively
 * executing tasks.
 *
 * @return the number of threads
 */
public int getActiveCount() {
    final ReentrantLock mainLock = this.mainLock;
    mainLock.lock();
    try {
        int n = 0;
        for (Worker w : workers)
            if (w.isLocked())
                ++n;
        return n;
    } finally {
        mainLock.unlock();
    }
}

最佳答案

该方法获取工作人员列表并计算被锁定的工作人员。

当计数到达列表的末尾时,先前计算的某些 worker 可能已经结束。 (或者可能已为一些未使用的 worker 提供了任务。)

但是,您不应该依赖此知识作为客户,而只是依靠尽力而为这一事实。请注意,这种“不准确性”不是草率实现的结果,它是每个真正的多线程系统所固有的。在这样的系统中,没有全局性的“当下”时刻。即使您停止所有工作人员进行计数,但在返回结果时可能还是不准确。

关于java - ThreadPoolExecutor#getActiveCount()到底是多少 'approximate'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24810744/

10-16 11:43