如何使用线程ID在Java中获取线程运行时间?

时间:2018-07-18 09:01:26

标签: 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 个答案:

答案 0 :(得分:1)

您有两个选择...(现在从我的头开始)

1-在应用程序启动期间存储日期,并将其与获取线程时的实际时间进行比较。比较启动应用程序的时间和当前时间,您就可以运行。但这不是最佳选择。

2-线程类检测。这是我第一次尝试。 在Agent方法中,使用Instrumentation创建ClassFileTransformer类,实现transform,在Thread方法中检查类的名称并捕获init类,并修改字节码以存储线程启动的时间。您可以为此使用Javassist。我认为Thread类中的startDate方法是放置sf::Text consoletxt; sf::Font font; if (!font.loadFromFile("Times_New_Roman.ttf")) std::cout<<"Error loading font Times New Roman"<<std::endl; consoletxt.setFont(font); consoletxt.setFillColor(sf::Color(255,255,255,255)); consoletxt.setCharacterSize(14); consoletxt.setOutlineColor(sf::Color(0,0,0,192)); consoletxt.setOutlineThickness(1); bool console = true; 变量并将此信息存储在那里的好地方。

有时间的时候,我将准备示例代码。