StopWatch的源码分析

StopWatch是一个简单的计时工具,用于统计任务的执行时间。它实现了Spring的StopWatch接口,记录任务列表、总耗时和开始时间。关键方法包括构造函数、start()、stop()和reset()。TaskInfo类存储任务的名称、开始和结束时间,便于时间统计和性能调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StopWatch 的源码比较简单,整个类实现了对时间的计时和统计。

具体来说,StopWatch 类实现了 org.springframework.util.StopWatch 接口,主要有以下字段:

  • private boolean keepTaskList = true;:是否记录任务列表,默认为 true。
  • private final List<TaskInfo> taskList = new ArrayList<>();:记录任务列表的集合。
  • private long totalTimeMillis;:总耗时。
  • private long startTimeMillis;:开始时间。
  • private String id;:标识当前 StopWatch 实例的 ID。

主要方法如下:

  1. public StopWatch() 构造函数,用于创建一个 StopWatch 实例,并设置默认的 ID。

  2. public StopWatch(String id) 构造函数,用于创建一个 StopWatch 实例,并设置指定的 ID。

  3. public void setId(String id) 设置 StopWatch 实例的 ID。

  4. public String getId() 获取 StopWatch 实例的 ID。

  5. public void setKeepTaskList(boolean keepTaskList) 设置是否记录任务列表。

  6. public void start() 开始计时。

  7. public void stop() 停止计时。

  8. public void reset() 重置计时器。

  9. public long getTotalTimeMillis() 获取总耗时。

  10. public List<TaskInfo> getTaskInfo() 获取任务列表。

start() 方法中,会记录当前时间作为开始时间,并把 running 标志置为 true;在 stop() 方法中,会记录当前时间作为结束时间,并更新总耗时,同时把 running 标志设置为 false;在 reset() 方法中,会将状态重置,并清空任务列表。

在统计任务执行时间时,StopWatch 通过 TaskInfo 对象来记录任务信息,该对象包含任务名称、任务开始和结束时间:

private static final class TaskInfo implements Serializable {
    private final String taskName;
    private final long timeMillis;
    private final long nanoTime;

    TaskInfo(String taskName, long timeMillis, long nanoTime) {
        this.taskName = taskName;
        this.timeMillis = timeMillis;
        this.nanoTime = nanoTime;
    }

    public String getTaskName() {
        return taskName;
    }

    public long getTimeMillis() {
        return timeMillis;
    }

    public long getNanoTime() {
        return nanoTime;
    }
}

StopWatch 中,每个任务的时间信息以一个 TaskInfo 对象的形式保存在一个列表中,方便进行时间统计。通过调用 getTaskInfo() 方法可以获取所有任务的时间信息,包括时间、任务名称等。如果需要记录更详细的信息,可以重写 TaskInfo 类或者直接通过获取开始和结束时间来进行额外的逻辑处理。

总之,StopWatch 的源码实现比较简单,主要是对时间的计时和统计,方便进行性能分析和调试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TianYuBaBy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值