Java中有秒表吗?

2022-08-31 08:25:44

Java中有秒表吗?
在Google上,我只找到了不起作用的秒表代码 - 它们总是返回0毫秒。

我发现的这个代码不起作用,我不明白为什么。

public class StopWatch {
  
  private long startTime = 0;
  private long stopTime = 0;
  private boolean running = false;
  
  
  public void start() {
    this.startTime = System.currentTimeMillis();
    this.running = true;
  }
  
  
  public void stop() {
    this.stopTime = System.currentTimeMillis();
    this.running = false;
  }
  
  
  //elaspsed time in milliseconds
  public long getElapsedTime() {
    long elapsed;
    if (running) {
      elapsed = (System.currentTimeMillis() - startTime);
    } else {
      elapsed = (stopTime - startTime);
    }
    return elapsed;
  }
  
  
  //elaspsed time in seconds
  public long getElapsedTimeSecs() {
    long elapsed;
    if (running) {
      elapsed = ((System.currentTimeMillis() - startTime) / 1000);
    } else {
      elapsed = ((stopTime - startTime) / 1000);
    }
    return elapsed;
  }
}

答案 1

你会在

http://commons.apache.org/lang/

它被称为

org.apache.commons.lang.time.StopWatch

但它的作用大致与你的相同。如果您想要更精确,请使用

System.nanoTime()

另请参阅此处的此问题:

在 Java 中测量开销的时间


答案 2

使用番石榴的秒表

一个以纳秒为单位测量经过时间的对象。使用此类而不是直接调用 来测量经过的时间很有用,原因如下:System.nanoTime()

  • 出于测试或性能原因,可以替换备用时间源。
  • 正如nanoTime所记录的那样,返回的值没有绝对意义,只能被解释为相对于nanoTime在不同时间返回的另一个时间戳。秒表是一个更有效的抽象,因为它只公开这些相对值,而不是绝对值。
Stopwatch stopwatch = Stopwatch.createStarted();
doSomething();
stopwatch.stop(); // optional

long millis = stopwatch.elapsed(TimeUnit.MILLISECONDS);

log.info("that took: " + stopwatch); // formatted string like "12.3 ms"

推荐