首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java线程池执行程序监控

Java线程池执行程序监控
EN

Stack Overflow用户
提问于 2012-05-09 05:29:52
回答 2查看 11.8K关注 0票数 8

Java 6文档中的ThreadPoolExecutor类具有以下方法

public int getActiveCount() 返回正在积极执行任务的线程的大致数目。

在这里近似和主动执行意味着什么?

如果在调用getActiveCount()之前、期间和之后,是否有任何保证

  1. N个线程已从池中分配用于任务执行,以及
  2. 这些N个线程都不能用于进一步的任务分配,

getActiveCount()返回的整数将精确为N

如果getActiveCount()不提供这一保证,是否有其他方法以更精确的方式获取这些信息?

优先问:

我看过线程池执行器监视要求如何判断java中的线程池中是否有可用线程,但是他们没有回答我的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-09 05:45:59

之所以是近似的原因是因为在计算过程中,数字可能会发生变化;您是多线程。在计算完成之前,不同数量的线程现在可能处于活动状态(选中时处于非活动状态的线程现在处于活动状态)。

当你说“特定的时间实例”..。这并不意味着什么。计算不是瞬时的。考虑到池的流动性/动态性,你得到的数字是最好的答案。

如果偶然地计算开始并完成,而池中的线程没有一个更改状态,那么是的,这个数字是“确切的”,但只有在池中的线程更改状态时才是正确的,这意味着它可能只对1ms (或更少)是“精确”的。

票数 10
EN

Stack Overflow用户

发布于 2012-05-09 05:49:12

我认为您可能是通过引入“重新加入池”的概念来混淆事情的,而这种概念在ThreadPoolExecutor的实现中并不真正存在。

每个工作线程持续地等待一个任务(它实际上位于阻塞队列的顶部)。每一个任务进入其队列,该工作人员被“锁定”,然后运行任何任务前的内务管理,然后实际的任务运行,然后是任务后的内务管理,然后工人是“解锁的”。

activeCount()给出处于“锁定”状态的线程数:请注意,这意味着它们实际上可以在调用activeCount()的精确时刻执行‘内务管理’,但是要计算为‘活动’,必须有一个实际涉及的任务,要么即将执行,要么刚刚执行。

这是否等同于你的“重新加入池”的概念,我不确定--正如我说的,你似乎在发明一个严格来说从ThreadPoolExecutor的角度来说并不存在的概念。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10510300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档