如何获得单线程花费的总时间?

时间:2018-09-12 09:35:09

标签: java multithreading

我有100个文件。有些文件大小为1mb,有些文件大小为100mb。我想利用多线程读取所有文件,并且想知道特定线程读取单个文件所花费的时间。最后,我想打印出该线程的时间。

注意:我不希望平均单个文件。

1 个答案:

答案 0 :(得分:1)

概述

因此,有几种方法可以实现此目标,具体取决于您所需的准确性水平。让我们在下面进行调查。

currentTimeMillis()

long start = System.currentTimeMillis();
// Your File Operation Logic
long end = System.currentTimeMillis();
long timeElapsed = end - start;

此方法的度量值为wall-clock time,因此可能会产生一些误差,但是出于测试目的,这可能就足够了。另外,这将以毫秒返回timeElapsed

nanoTime()

long start = System.nanoTime();
// Your File Operation Logic
long end = System.nanoTime();
long timeElapsed = end - start;

此方法与currentTimeMillis()不同,因为它的度量单位为纳秒。此外,javadocs状态:

  

此方法只能用于测量经过时间,与系统或挂钟时间的任何其他概念无关

即时和持续时间

Instant start = Instant.now();
// Your File Operation Logic
Instant end = Instant.now();
long timeElapsed = Duration.between(start, end).toMillis();

这些类'是不可变的,线程安全的,并利用它们自己的时间范围。但是,您必须使用 Java 8 或更高版本才能使用。

实施

  • 对于线程操作,使用上述逻辑块包装执行您希望测量的文件操作的方法。
  • 我建议为时间值创建一个线程安全集合(您的实现可能有所不同),这些集合将在以后打印。在测量时间/性能时使用打印报表会产生非常不准确的结果,应在计算后使用。