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/