Spring StopWatch源码
- import java.text.NumberFormat;
- import java.util.LinkedList;
- import java.util.List;
- public class StopWatch {
- private final String id;
- private boolean keepTaskList = true;
- private final List<TaskInfo> taskList = new LinkedList();
- private long startTimeMillis;
- private boolean running;
- private String currentTaskName;
- private StopWatch.TaskInfo lastTaskInfo;
- private int taskCount;
- private long totalTimeMillis;
- public StopWatch() {
- this.id = "";
- }
- public StopWatch(String id) {
- this.id = id;
- }
- public void setKeepTaskList(boolean keepTaskList) {
- this.keepTaskList = keepTaskList;
- }
- public void start() throws IllegalStateException {
- this.start("");
- }
- public void start(String taskName) throws IllegalStateException {
- if (this.running) {
- throw new IllegalStateException("Can't start StopWatch: it's already running");
- } else {
- this.startTimeMillis = System.currentTimeMillis();
- this.running = true;
- this.currentTaskName = taskName;
- }
- }
- public void stop() throws IllegalStateException {
- if (!this.running) {
- throw new IllegalStateException("Can't stop StopWatch: it's not running");
- } else {
- long lastTime = System.currentTimeMillis() - this.startTimeMillis;
- this.totalTimeMillis += lastTime;
- this.lastTaskInfo = new StopWatch.TaskInfo(this.currentTaskName, lastTime);
- if (this.keepTaskList) {
- this.taskList.add(this.lastTaskInfo);
- }
- ++this.taskCount;
- this.running = false;
- this.currentTaskName = null;
- }
- }
- public boolean isRunning() {
- return this.running;
- }
- public long getLastTaskTimeMillis() throws IllegalStateException {
- if (this.lastTaskInfo == null) {
- throw new IllegalStateException("No tasks run: can't get last task interval");
- } else {
- return this.lastTaskInfo.getTimeMillis();
- }
- }
- public String getLastTaskName() throws IllegalStateException {
- if (this.lastTaskInfo == null) {
- throw new IllegalStateException("No tasks run: can't get last task name");
- } else {
- return this.lastTaskInfo.getTaskName();
- }
- }
- public StopWatch.TaskInfo getLastTaskInfo() throws IllegalStateException {
- if (this.lastTaskInfo == null) {
- throw new IllegalStateException("No tasks run: can't get last task info");
- } else {
- return this.lastTaskInfo;
- }
- }
- public long getTotalTimeMillis() {
- return this.totalTimeMillis;
- }
- public double getTotalTimeSeconds() {
- return (double) this.totalTimeMillis / 1000.0D;
- }
- public int getTaskCount() {
- return this.taskCount;
- }
- public StopWatch.TaskInfo[] getTaskInfo() {
- if (!this.keepTaskList) {
- throw new UnsupportedOperationException("Task info is not being kept!");
- } else {
- return (StopWatch.TaskInfo[]) this.taskList.toArray(new StopWatch.TaskInfo[this.taskList.size()]);
- }
- }
- public String shortSummary() {
- return "StopWatch '" + this.id + "': running time (millis) = " + this.getTotalTimeMillis();
- }
- public String prettyPrint() {
- StringBuilder sb = new StringBuilder(this.shortSummary());
- sb.append('\n');
- if (!this.keepTaskList) {
- sb.append("No task info kept");
- } else {
- sb.append("-----------------------------------------\n");
- sb.append("ms % Task name\n");
- sb.append("-----------------------------------------\n");
- NumberFormat nf = NumberFormat.getNumberInstance();
- nf.setMinimumIntegerDigits(5);
- nf.setGroupingUsed(false);
- NumberFormat pf = NumberFormat.getPercentInstance();
- pf.setMinimumIntegerDigits(3);
- pf.setGroupingUsed(false);
- StopWatch.TaskInfo[] var7;
- int var6 = (var7 = this.getTaskInfo()).length;
- for (int var5 = 0; var5 < var6; ++var5) {
- StopWatch.TaskInfo task = var7[var5];
- sb.append(nf.format(task.getTimeMillis())).append(" ");
- sb.append(pf.format(task.getTimeSeconds() / this.getTotalTimeSeconds())).append(" ");
- sb.append(task.getTaskName()).append("\n");
- }
- }
- return sb.toString();
- }
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder(this.shortSummary());
- if (this.keepTaskList) {
- StopWatch.TaskInfo[] var5;
- int var4 = (var5 = this.getTaskInfo()).length;
- for (int var3 = 0; var3 < var4; ++var3) {
- StopWatch.TaskInfo task = var5[var3];
- sb.append("; [").append(task.getTaskName()).append("] took ").append(task.getTimeMillis());
- long percent = Math.round(100.0D * task.getTimeSeconds() / this.getTotalTimeSeconds());
- sb.append(" = ").append(percent).append("%");
- }
- } else {
- sb.append("; no task info kept");
- }
- return sb.toString();
- }
- public static final class TaskInfo {
- private final String taskName;
- private final long timeMillis;
- TaskInfo(String taskName, long timeMillis) {
- this.taskName = taskName;
- this.timeMillis = timeMillis;
- }
- public String getTaskName() {
- return this.taskName;
- }
- public long getTimeMillis() {
- return this.timeMillis;
- }
- public double getTimeSeconds() {
- return (double) this.timeMillis / 1000.0D;
- }
- }
- }
来源:https://blog.csdn.net/gxs1688/article/details/87185030
Spring StopWatch源码的更多相关文章
- 别再用 System.currentTimeMillis 统计耗时了,太 Low,试试 Spring Boot 源码在用的 StopWatch吧,够优雅!
大家好,我是二哥呀! 昨天,一位球友问我能不能给他解释一下 @SpringBootApplication 注解是什么意思,还有 Spring Boot 的运行原理,于是我就带着他扒拉了一下这个注解的源 ...
- Spring Boot源码分析-启动过程
Spring Boot作为目前最流行的Java开发框架,秉承"约定优于配置"原则,大大简化了Spring MVC繁琐的XML文件配置,基本实现零配置启动项目. 本文基于Spring ...
- 曹工说Spring Boot源码(19)-- Spring 带给我们的工具利器,创建代理不用愁(ProxyFactory)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- Spring Boot系列(四):Spring Boot源码解析
一.自动装配原理 之前博文已经讲过,@SpringBootApplication继承了@EnableAutoConfiguration,该注解导入了AutoConfigurationImport Se ...
- 精尽Spring Boot源码分析 - SpringApplication 启动类的启动过程
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
- spring事务源码研读1
转载摘录自:Spring事务源码分析(一)Spring事务入门 有时为了保证一些操作要么都成功,要么都失败,这就需要事务来保证. 传统的jdbc事务如下: @Test public void test ...
- Spring IoC源码解决——工具篇Eclipse
题外话 对于Spring框架,平时都是点到为止,停留在会用的程度.一直以来都想深入学习下,刚好最近看到<Spring源码深度解析>,所以想随着书本深入学习一下. 如果用Maven 如果使用 ...
- 深入Spring IOC源码之ResourceLoader
在<深入Spring IOC源码之Resource>中已经详细介绍了Spring中Resource的抽象,Resource接口有很多实现类,我们当然可以使用各自的构造函数创建符合需求的Re ...
随机推荐
- c# 定制Equals()
- Hbase Region in transition问题解决
1 hbase hbck -repair 强制修复 如果ok就可以 2 不ok,找到hdfs上对应的该表位置,删除,之后在使用hbase hbck -repair 解决过程: 第一次,使用了方法二, ...
- git命令——git status、git diff
前言 当对项目做了更改时,我们通常需要知道具体改了哪些文件,哪些文件更改了没有暂存,哪些文件改了并且已加入到暂存区等待下次commit.上述任务使用git status都可以帮我们解决.但是想要知道文 ...
- 基于Java+Selenium的WebUI自动化测试框架(二)-----页面操作接口
在有了基础的Position类之后,我们需要考虑我们在寻找完页面元素之后,需要做什么.这个“做”什么,可以理解为我们在页面上需要对应的一系列动作.比如:点击,输入,切换窗口,寻找元素,判断元素是否存在 ...
- JDBC终章- 使用 DBUtils实现增删查改- C3P0Utils数据源/QueryRunner runner连接数据源并执行sql
JDBC终章- 使用 DBUtils实现增删查改 1.数据库结构 Create Table CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, ...
- SQL进阶17-变量的声明/使用(输出)--全局变量/会话变量--用户变量/局部变量
/*进阶17 变量 系统变量: 全局变量: 会话变量: 自定义变量: 用户变量: 局部变量: */ /* #一: 系统变量 #说明: 变量由系统提供,不是用户定义的,属于服务器层面 #使用的语法 #1 ...
- 猜数游戏-人机对战-经典的randint使用
翻阅去年的笔记,老师曾经教的random模块下的三种用法,其中之一是randint用法,今天上传,留作笔记参考.人生苦短,我用python! # -*- coding: UTF-8 -*- impor ...
- 前端学习笔记--html入门
1.什么是html 2.标签和元素: 标签可嵌套,要注意缩进 html文档中的元素分为:内容文本.标签 3.标签和属性: 4.html的文件结构: 5.标签 a标签: 还不知道跳转到哪里,可以使用虚拟 ...
- Selenium常用API的使用java语言之5-selenium元素定位
1.selenium定位方法 Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css ...
- Dao的扩展
题目: 1.查询所有学生记录,包含年级名称2.查询S1年级下的学生记录 一.项目目录 package com.myschool.entity; import java.util.ArrayList; ...