我正在开发一个具有两个线程的 Java 应用程序:
- 一个生产者线程,以 10 KHz 的频率向
ArrayBlockingQueue
提供数据(它实际上是通过 JNI 的 C 代码)。 - 一个消费者线程,使用
take
方法从队列中获取数据,然后对其进行处理(您不能假设处理时间始终相同)。由于我使用的是take
方法,如果队列中没有可用数据,该线程可能会被阻塞。
我想知道如何监视或分析消费者线程以了解其等待或阻塞的时间。
我对诸如使用 System.currentTimeMillis()
计算时间和求差异等答案不感兴趣。我想知道如何分析整个线程生命周期并总结每个线程状态的时间(如果可能的话)。
如何进行这种监控?
提前致谢!
最佳答案
任何像样的 Java Profiler 都可以按线程分离统计信息,即使是 JDK 中包含的相当基本的 JVisualVM。这是 JVisualVM self 观察的屏幕截图:
相同的信息也可以显示在表格中:
关于java - 如何知道java进程等待了多少时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33266482/