Java中有秒表吗?

新手上路,请多包涵

Java中有秒表吗?

在谷歌上,我只找到了不起作用的秒表代码——它们总是返回 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;
  }
}

原文由 user1007522 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 608
2 个回答

使用 Guava 的 Stopwatch

以纳秒为单位测量经过时间的对象。使用此类而不是直接调用 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"

原文由 helpermethod 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题