如何在java中获取实际线程执行时间?

问题描述 投票:0回答:1

我想测量一个线程的执行时间,我已经创建了一个示例程序。

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

public class Sample {
public static void main(String[] args ) {
    ThreadPoolExecutor exec = (ThreadPoolExecutor)Executors.newFixedThreadPool(1000);
    for(int i=0; i<1000; i++) {
        exec.execute(new Runnable() {
            @Override
            public void run() {
                long start = System.currentTimeMillis();
                try{
                    Thread.sleep(10000);
                } catch(Exception ex) {
                    ex.printStackTrace();
                }
                long end = System.currentTimeMillis();
                System.out.println("[Sample] Thread id : " + Thread.currentThread().getId() + ", time : " + (end - start));
            }
        });
    }
}

}

每个线程睡眠时间为10秒。所以持续时间=(结束-开始)应该是10000。但是有些线程的时间比预期的要多。我猜测这也包括线程切换时间和和阻塞时间。有没有一种方法可以测量JAVA中线程程序的执行时间?

事情是这样的,我有一个在线程中进行网络调用的程序。所以即使socket超时比如60秒,线程执行时间也接近2分钟。我猜测,上述计算执行时间的方式还考虑了线程切换时间和阻塞时间。它并不是在测量实际的线程执行时间

谢谢,我想测量一个线程的执行时间。

java multithreading executorservice
1个回答
0
投票

对于这种情况,我使用 JavaVisualVM我在本地运行了你的代码,这就是visual VM给我的显示。

所有的线程都有完全相同的睡眠时间,所以我们在控制台日志中看到的差异可能是误导性的。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.