我的目标是在浏览器中显示所有线程及其运行时间。这是我的代码块。
ThreadInfo[] infoThreads = ManagementFactory.getThreadMXBean().dumpAllThreads(true, true);
for (int i = infoThreads.length - 1; i > 0; i--) {
if (infoThreads[i].getThreadName().contains("http")) {
if (infoThreads[i].getThreadState() != State.WAITING && infoThreads[i].getThreadState() != State.TIMED_WAITING) {
}
}
}
最佳答案
你有两个选择......(现在就在我的脑海里)
1 - 在应用程序启动期间存储日期,并将其与获取线程时的实际时间进行比较。比较启动应用程序时间和当前时间,您就有运行时间。但这不是最好的选择。
2 - 线程类检测。这是我第一次尝试。
使用Instrumentation创建一个Agent
类,实现ClassFileTransformer
,在transform
方法中检查类名并捕获Thread
类并修改字节码来存储线程启动时间。您可以使用 Javassist 来实现这一点。我认为 Thread 类中的 init
方法是放置 startDate
变量并存储此信息的好地方。
当我有时间时,我会准备示例代码。
关于java - java中如何使用线程ID获取线程运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51397808/