StopWatch的源码分析

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 的源码实现比较简单,主要是对时间的计时和统计,方便进行性能分析和调试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TianYuBaBy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值