1

我有一个阻塞队列,工作人员从该队列中取出,然后工作大约 1-10 毫秒。

我想弄清楚工人在给定时间范围内活动和空闲的时间的一些相对数字(例如,最后一分钟活动的 70%)。

总结短短的 1ms 周期可能是不准确的,并且获取纳米时间会消耗很多性能。

有没有一些巧妙的方法来完成这样的任务?

我在我的代码中更频繁地使用这些队列工作者设置,因此我希望能够在运行时分析瓶颈。

编辑:我只想知道线程是否可以工作。如果操作系统将线程移出处理焦点,它仍应计数。只有在等待队列锁时才应该算作空闲时间。

4

1 回答 1

2

对池中每个线程的 Thread.getState() 进行采样,然后报告采样时处于每个状态的线程百分比的方法怎么样?

这样您就可以了解线程处于 NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING 和 TERMINATED 状态的频率。

我能想到的唯一其他方法是在分析工具中运行您的代码。YourKit 的 Java 分析器非常好,并附带 1530 天试用许可证...

http://www.yourkit.com/java/profiler/

于 2011-11-28T21:39:46.420 回答