Java SE 6文档中的ThreadPoolExecutor类具有以下method:
public int getActiveCount()
返回大致的线程数 正在积极执行任务。
此处近似和正在执行的含义是什么?
如果在致电getActiveCount()
getActiveCount()
返回的整数将完全 N ?
如果getActiveCount()
没有提供此保证,是否有其他方式可以更准确地获取此信息?
之前的SO问题:
我查看了Thread Pool Executor Monitoring Requirement和How to tell if there is an available thread in a thread pool in java,但他们没有回答我的问题。
答案 0 :(得分:9)
近似的原因是因为在计算过程中数字可能会发生变化;你是多线程的。在计算完成之前,现在可以激活不同数量的线程(检查时处于非活动状态的线程现在处于活动状态)。
当你说“特定时间实例”时......这并不意味着什么。计算不是即时的。鉴于泳池的流体/动态特性,您获得的数字是最佳答案。
如果通过 chance 计算开始并完成,而池中的任何线程都没有更改状态,那么该数字是“确切的”,但只有在池中的线程改变状态时,这意味着它可能只是“精确”1ms(或更短)。
答案 1 :(得分:2)
我认为你可能通过引入一个“重新加入池”的概念来混淆事物,而这个概念在ThreadPoolExecutor的实现中并不存在。
每个工作线程都在不断地等待任务(它实际上位于阻塞队列之上)。每个任务进入其队列,该工作人员被“锁定”,然后运行任何任务前管理,然后运行实际任务,然后执行任务后管理,然后工作人员“解锁”。
activeCount()为您提供处于“锁定”状态的线程数:请注意,这意味着它们实际上可以在调用activeCount()的确切时刻进行“内务处理”,但这被视为“活动” ',实际上必须涉及一项任务,无论是将来,当前还是刚被执行。
这是否等同于你“重新加入游泳池”的概念我不确定 - 正如我所说,你似乎正在发明一个从ThreadPoolExecutor的角度来看严格来说不存在的概念。