Spring计时器StopWatch的具体使用

 更新时间:2023年06月28日 15:04:37   作者:骑个小蜗牛  
本文主要介绍了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

到此这篇关于Spring计时器StopWatch的具体使用的文章就介绍到这了,更多相关Spring StopWatch内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现在Word文档中添加文本水印和图片水印的操作指南

    Java实现在Word文档中添加文本水印和图片水印的操作指南

    在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加水印都是一种常见且高效的手段,本文将为您详细介绍如何利用Java轻松实现在Word文档中添加文本水印和图像水印的功能
    2025-08-08
  • Java加载JDBC驱动程序实例详解

    Java加载JDBC驱动程序实例详解

    这篇文章主要介绍了Java加载JDBC驱动程序的方法,需要的朋友可以参考下
    2014-07-07
  • SpringMVC拦截器快速掌握上篇

    SpringMVC拦截器快速掌握上篇

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。本文将详细讲讲SpringMVC中拦截器的概念及入门案例,感兴趣的可以尝试一下
    2022-08-08
  • 使用maven如何将项目中的test代码打包进jar中

    使用maven如何将项目中的test代码打包进jar中

    这篇文章主要介绍了使用maven如何将项目中的test代码打包进jar中,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 使用SpringAI整合Ollama实现工具链调用功能

    使用SpringAI整合Ollama实现工具链调用功能

    文章介绍了SpringAI的ToolCalling能力,允许大模型自主调用外部工具以完成多步骤任务,具体而言,通过@Tool注解标记方法,SpringAI自动解析生成JSONSchema,@Tools注解注册多个工具,模型可自主选择调用顺序和组合,需要的朋友可以参考下
    2026-05-05
  • IDEA创建Spring项目无法选择Java8的问题及解决

    IDEA创建Spring项目无法选择Java8的问题及解决

    文章描述了在使用Spring创建项目时遇到的问题,通过将服务器地址从https://start.spring.io/替换为https://start.aliyun.com/,成功解决了无法选择Java8的问题
    2025-01-01
  • Java中四种引用详解

    Java中四种引用详解

    这篇文章主要为大家介绍了Java中的四种引用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 聊聊ResourceBundle和properties读取配置文件的区别

    聊聊ResourceBundle和properties读取配置文件的区别

    这篇文章主要介绍了ResourceBundle和properties读取配置文件的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java数据结构之散列表详解

    Java数据结构之散列表详解

    散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。本文将为大家具体介绍一下散列表的原理及其代码实现
    2022-01-01
  • logback输出日志屏蔽quartz的debug等级日志方式

    logback输出日志屏蔽quartz的debug等级日志方式

    这篇文章主要介绍了logback输出日志屏蔽quartz的debug等级日志方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论