行业资讯 2025年08月6日
0 收藏 0 点赞 115 浏览 2062 个字
摘要 :

文章目录 1. 在Java 8中实现自定义StopWatch用法 2. Apache Commons的StopWatch用法 3. 结论 在本文中,我们将探讨如何在Java中创建一个简单的秒表,并重点讲下StopWat……




  • 1. 在Java 8中实现自定义StopWatch用法
  • 2. Apache Commons的StopWatch用法
  • 3. 结论

在本文中,我们将探讨如何在Java中创建一个简单的秒表,并重点讲下StopWatch秒表在Java中的用法。秒表是测量方法执行时间的便捷工具,有助于我们跟踪请求处理中各个部分消耗的时间。

1. 在Java 8中实现自定义StopWatch用法

从Java 8开始,我们使用java.time.Instant类以纳秒精度捕获当前时间。要计算程序操作的执行时间,我们可以在程序执行开始之前和结束之后捕获当前时间。

Stopwatch stopwatch = new Stopwatch();
stopwatch.start();

// ...

stopwatch.stop();

long millis = stopwatch.getElapsedTime();
long nanos = stopwatch.getElapsedTime(TimeUnit.NANOSECONDS);

通过知道开始时间和结束时间之间的差异,我们可以计算程序的执行时间。为了实现自定义秒表,我们创建了一个Stopwatch类,当调用start()stop()方法时,它会记录开始时间和结束时间。如果我们没有调用stop()方法,它将返回从调用start()方法开始经过的时间。

Stopwatch.javapublic final class Stopwatch {
  private Instant startTime;
  private Instant endTime;
  private boolean running;
  public void start() {
    if (!running) {
      startTime = Instant.now();
      running = true;
    } else {
      System.out.println(\"Stopwatch is already running. Use stop() before starting again.\");
    }
  }
  public void stop() {
    if (running) {
      endTime = Instant.now();
      running = false;
    } else {
      System.out.println(\"Stopwatch is not running. Use start() before stopping.\");
    }
  }
  public Duration getElapsedDuration() {
    if (running) {
      return Duration.between(startTime, Instant.now());
    } else {
      return Duration.between(startTime, endTime);
    }
  }
  public long getElapsedTime() {
    Duration duration = getElapsedDuration();
    return duration.toMillis();
  }
  public long getElapsedTime(TimeUnit timeUnit) {
    return timeUnit.convert(getElapsedTime(), TimeUnit.MILLISECONDS);
  }
}

2. Apache Commons的StopWatch用法

Apache Commons Lang3库提供了org.apache.commons.lang3.time.StopWatch类的内置实现,我们可以直接在代码中使用。使用模式与我们之前讨论的自定义秒表类似。这个StopWatch提供了以下额外功能:

import org.apache.commons.lang3.time.StopWatch;
//...
Stopwatch stopwatch = new Stopwatch();
stopwatch.start();
// ...
stopwatch.stop();
long millis = stopwatch.getElapsedTime();
long nanos = stopwatch.getElapsedTime(TimeUnit.NANOSECONDS);
  • 可以通过suspend()和resume()方法暂停和恢复,因此可以使用相同的秒表实例来计算代码中不同部分的执行时间。在暂停和恢复之间的任何时间都不会计入总时间。
  • 可以通过createStarted()方法以启动模式创建,这样我们就不需要显式地调用start()方法了。
  • split()方法可以在秒表在后台继续运行时获取时间。unsplit()将消除split()的效果。
  • 它强制方法调用按正确的顺序进行,因此现在不能在start之前调用stop,在suspend之前调用resume,或在split之前调用unsplit。

但请注意,这个秒表不是线程安全的。

3. 结论

这篇简短的Java教程讨论了如何在Java中实现和使用秒表功能。我们为简单的用例创建了一个自定义的最基础秒表实现。对于高级用例,我们应该使用Apache Commons StopWatch类。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/10208.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号