run 方法第第一步就是 创建一个StopWatch,然后启动

public ConfigurableApplicationContext run(String... args) {// 1、StopWatch stopWatch = new StopWatch();stopWatch.start();// 略 ...
}

1、new StopWatch()

/****** org.springframework.util.StopWatch ******/public StopWatch() {this("");
}
private final String id;// 唯一标识
public StopWatch(String id) {this.id = id;
}

简单不赘述

2、stopWatch.start()

开始计时

/****** org.springframework.util.StopWatch ******/public void start() throws IllegalStateException {start("");
}
private boolean running;// 是否正在运行
private String currentTaskName;// 当前任务名称
private long startTimeMillis;// 当前任务开始时间
public void start(String taskName) throws IllegalStateException {if (this.running) {throw new IllegalStateException("Can't start StopWatch: it's already running");}this.running = true;this.currentTaskName = taskName;this.startTimeMillis = System.currentTimeMillis();
}

简单不赘述

3、stopWatch.stop()

/****** org.springframework.util.StopWatch ******/private long totalTimeMillis;// 累计耗时
private boolean keepTaskList = true;
private final List<TaskInfo> taskList = new LinkedList<TaskInfo>();
private int taskCount; // 任务计数器
public void stop() throws IllegalStateException {if (!this.running) {throw new IllegalStateException("Can't stop StopWatch: it's not running");}long lastTime = System.currentTimeMillis() - this.startTimeMillis;this.totalTimeMillis += lastTime;this.lastTaskInfo = new TaskInfo(this.currentTaskName, lastTime);if (this.keepTaskList) {this.taskList.add(lastTaskInfo);}++this.taskCount;this.running = false;// 设置运行状态为停止this.currentTaskName = null;
}/****** org.springframework.util.StopWatch$TaskInfo  ******/public static final class TaskInfo {private final String taskName;private final long timeMillis;TaskInfo(String taskName, long timeMillis) {this.taskName = taskName;this.timeMillis = timeMillis;}
}

简单不赘述

整个代码很简单,StopWatch就是一个码表,可以反复启动停止。

停止时会将记录运行时间,然后创建一个任务(TaskInfo)放入码表的List属性中。

Q&A

Q1、run 方法中这个 StopWatch 的作用是什么?

我们看到第 13 步 ,用到了StopWatch 对象,具体作用参考 StartupInfoLogger.logStarted

2.1、StopWatch 启动与停止(ok)相关推荐

  1. C# Winform 启动和停止进程

    启动和停止进程 一.启动进程 方法1: (1)       创建一个Process组件的实例,例如: Process myProcess = new Process(); (2)       设置其对 ...

  2. Linux Named 进程启动、停止脚本

    脚本名称 dnsnamed 脚本功能: 负责DNS服务器Named进程的启动.停止和状态信息采集等. 参数:start|stop|status 运行环境 OS:Linux Shell:Bash She ...

  3. [转]使用批处理设置、启动和停止服务

    使用批处理设置.启动和停止服务                                                              Pashine     当我们的电脑安装了数据 ...

  4. AIX上如何启动和停止系统服务

    AIX上如何启动和停止系统服务 ----------------------------- 在 AIX 上,服务也可以称为子系统(Subsystem),它是受控于系统资源控制器(System Reso ...

  5. 本地计算机上的 postgresql 服务启动后停止解决方法

    本地计算机上的 postgresql 服务启动后停止解决方法 参考文章: (1)本地计算机上的 postgresql 服务启动后停止解决方法 (2)https://www.cnblogs.com/mr ...

  6. Atitit. 软件GUIbutton与仪表盘--webserver区--获取apache配置文件路径 linux and apache的启动、停止、重新启动...

    Atitit.   软件GUIbutton与仪表盘--webserver区--获取apache配置文件路径 linux and apache的启动.停止.重新启动 能够通过"netstat  ...

  7. Nginx —— nginx的命令行控制(nginx的启动与停止、重载配置文件、回滚日志文件、平滑升级等操作)

    在linux中,需要使用命令来控制Nginx服务器的启动与停止.重载配置文件.回滚日志文件.平滑升级等行为. 默认情况下,nginx被安装在目录/usr/local/nginx中,其二进制文件路径为/ ...

  8. Docker的启动与停止命令

    Docker的启动与停止 systemctl命令是系统服务管理器指令 启动docker: systemctl start docker 停止docker: systemctl stop docker ...

  9. MySql——安装与配置与启动和停止

    在Linux上安装mysql数据库,我们可以去其官网上下载mysql数据库的rpm包,http://dev.mysql.com/downloads/mysql/5.6.html#downloads,大 ...

最新文章

  1. HTMLButton控件下的Confirm()
  2. 51nod 1038 X^A Mod P( N 次剩余)
  3. 皮一皮:女友在意的点....是包子!
  4. src与href的区别
  5. oracle 跳出内层循环,内层程序中发生异常后,不会继续执行外层程序的语句
  6. Android应用程序组件Content Provider简要介绍和学习计划
  7. Java面试题 Java如何进行高效的数组拷贝?【Arrays.copyOf()】
  8. Thinkpad F2不能进行重命名的问题
  9. 【UVA - 11383】Claw Golden Tiger (二分图最优匹配,KM算法原理)
  10. 【今日CV 计算机视觉论文速览 第134期】Fri, 21 Jun 2019
  11. python有关时间的函数time和datatime
  12. SaltStack实战之远程执行-Modules
  13. VSCode 6 月 Java 更新,编辑器就该有编辑器的样子
  14. 前端人员必须掌握哪些技术?常见缓存种类有什么?
  15. 赢得黑客马拉松的 9 种方式
  16. 基于vue-cli的多页面应用脚手架
  17. performSelector:withObject:afterDelay: 的用法
  18. OMP算法的物理意义表示
  19. 半导体界仙童“八叛逆”又一人去世,仅存一人!
  20. ubuntu下rabbitvcs安装后无右键菜单解决办法

热门文章

  1. iis swagger 部署_asp.net-core – 虚拟目录中的IIS站点Swagger UI端点
  2. python encode函数_python_base64和encode函数
  3. 基础html的网页,[网页设计]HTML基础(五)——
  4. php获取当天 天气预报,PHP获取当天和72小时天气预报,并生成接口
  5. Python 创建目录文件夹
  6. Spring Security中关于认证授权的配置
  7. 微信公众号web端关闭本页面
  8. JS中获取地址栏中的参数
  9. 使用前台方式启动Redis时,出现Creating Server TCP listening socket 127.0.0.1:6379: bind: Address already in use报错
  10. jmap查看java进程占用的数据库连接数