文章目录

  • StopWatch介绍
  • StopWatch属性详解
  • StopWatch方法详解
  • StopWatch使用示例

StopWatch介绍

StopWatch类是Spring框架中用于测量代码执行时间的工具类,它提供了一系列属性来记录监测信息。

本文基于spring-boot-starter-web:2.2.2RELEASE版本。

源码:

public class StopWatch {private final String id;private boolean keepTaskList = true;private final List<StopWatch.TaskInfo> taskList = new LinkedList<>();private long startTimeMillis;@Nullableprivate String currentTaskName;@Nullableprivate StopWatch.TaskInfo lastTaskInfo;private int taskCount;private long totalTimeMillis;......方法略public static final class TaskInfo {private final String taskName;private final long timeNanos;}}

StopWatch属性详解

属性描述
id表示该StopWatch对象的唯一标识符,可以通过构造函数传入。
keepTaskList表示是否保留所有记录的监测任务,,默认为true。
如果该值为true,则程序可以通过getTaskInfo()方法获取所有监测任务的详细信息,否则仅可以获取最后一次监测任务的详细信息。
taskList用于记录所有的监测任务信息,只有keepTaskList属性值为true时才记录任务信息,该值在stop()方法调用时添加一条任务信息。
currentTaskName表示当前正在执行的监测任务名称,该值在start()方法调用时设置。
lastTaskInfo表示最后一次执行的监测任务的详细信息,包括任务名称、执行时间等,该值在stop()方法调用时设置。
taskCount表示执行的监测任务数目,该值在stop()方法调用时值+1。
totalTimeMillis表示该StopWatch对象记录的所有监测任务的总执行时间,单位为毫秒,该值在stop()方法调用时值+当前任务的执行时间。
TaskInfo.taskName任务名称。
TaskInfo.timeNanos任务执行时间。

StopWatch方法详解

方法描述
void setKeepTaskList(boolean keepTaskList)设置是否保留所有记录的监测任务,默认为true。
如果该值为true,则程序可以通过getTaskInfo()方法获取所有监测任务的详细信息。
void start()开始一个新的监测任务,可设置任务名称。记录当前时间和任务名称。
void stop()结束当前监测任务。记录任务执行时间,更新总执行时间和任务数量。
String getId()获取唯一标识符。
String currentTaskName()获取当前正在运行的监测任务名称。
TaskInfo getLastTaskInfo()获取最后一次执行的监测任务的详细信息,包括任务名称、开始时间、结束时间和执行时间等。
String getLastTaskName()获取最后一次执行的监测任务的任务名称
long getLastTaskTimeMillis()获取最后一次执行的监测任务的执行时间,单位毫秒
long getLastTaskTimeNanos()获取最后一次执行的监测任务的执行时间,单位纳秒
int getTaskCount()获取已执行的监测任务数目
TaskInfo[] getTaskInfo()获取所有监测任务信息,仅在keepTaskList属性为true时有效。
double getTotalTimeSeconds()获取所有监测任务的总执行时间,单位为秒。
long getTotalTimeMillis()获取所有监测任务的总执行时间,单位为毫秒。
long getTotalTimeNanos()获取所有监测任务的总执行时间,单位为纳秒。
boolean isRunning()判断当前StopWatch对象是否正在执行监测任务。
String shortSummary()以字符串形式输出所有监测任务的简要信息,包括任务数目和总执行时间。
String prettyPrint()以字符串形式输出所有监测任务的执行时间和详细信息。

StopWatch使用示例

public static void main(String[] args) throws InterruptedException {StopWatch stopWatch = new StopWatch();stopWatch.start("task1");System.out.println("当前任务名称:"+stopWatch.currentTaskName());Thread.sleep(1000);stopWatch.stop();System.out.println("task1耗时毫秒:"+stopWatch.getLastTaskTimeMillis());stopWatch.start("task2");System.out.println("当前任务名称:"+stopWatch.currentTaskName());Thread.sleep(2000);stopWatch.stop();System.out.println("task2耗时毫秒:"+stopWatch.getLastTaskTimeMillis());System.out.println("总任务数:"+stopWatch.getTaskCount());System.out.println("总耗时毫秒:"+stopWatch.getTotalTimeMillis());System.out.println("所有任务简要信息:\n"+stopWatch.shortSummary());System.out.println("所有任务详细信息:\n"+stopWatch.prettyPrint());}

输出:

当前任务名称:task1task1耗时毫秒:1013当前任务名称:task2task2耗时毫秒:2014总任务数:2总耗时毫秒:3027所有任务简要信息:StopWatch '': running time = 3027555400 ns所有任务详细信息:StopWatch '': running time = 3027555400 ns---------------------------------------------ns % Task name---------------------------------------------1013462900033%task12014092500067%task2