Spring计时器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;
    @Nullable
    private String currentTaskName;
    @Nullable
    private 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());
    }

输出:

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

猜你喜欢

转载自blog.csdn.net/JokerLJG/article/details/129010224