java - java中如何使用线程ID获取线程运行时间?

标签 java multithreading java-threads

我的目标是在浏览器中显示所有线程及其运行时间。这是我的代码块。

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/

相关文章:

java - 持久层的命名约定 : DAO vs Manager vs . ..?

c# - 代码行不遵循顺序执行

java - 为什么这些同步方法不断给我不同的输出?

java - 如何获取复选框组的标签值?

java - 手动安装时无法在 ubuntu 14.04 中设置 JAVA_HOME 变量

java - 通用方法语法

java - JVM 无法在 Cloud Foundry 中创建线程

c++ - 内存栅栏——需要帮助才能理解

java - 同时从列表中删除对象

android - 为什么线程不运行?