【计时器】org.springframework.util.StopWatch

org.springframework.util.StopWatch计时器

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
StopWatch clock = new StopWatch("007"); //传入计时器的ID
clock.start("任务一"); //传入任务名,开始计时
doSomeThing();
clock.stop(); //停止计时
System.out.println(clock.shortSummary());
//只输出运行时间:
//StopWatch '007': running time (millis) = 1001
System.out.println(clock.prettyPrint());
//输出详细信息:
//StopWatch '007': running time (millis) = 1001
// -----------------------------------------
// ms % Task name
// -----------------------------------------
// 01001 100% 任务一

private static void doSomeThing() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

源码

构造函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//是否存在任务列表
private boolean keepTaskList;
//任务列表
private final List<StopWatch.TaskInfo> taskList;
//ID
private final String id;

//无参构造函数
public StopWatch() {
this("");
}

//传入ID的构造函数
public StopWatch(String id){
this.keepTaskList = true;
this.taskList = new LinkedList();
this.id = id;
}

启动计时器:.start()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//计时器是否在运行
private boolean running;
//当前任务名
private String currentTaskName;
//计时器启动时间
private long startTimeMillis;

//不传入任务名,启动计时器
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.running = true;
this.currentTaskName = taskName;
//记录启动时间
this.startTimeMillis = System.currentTimeMillis();
}
}

停止计时器:.stop()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//计时器的总耗时(不是单个任务)
private long totalTimeMillis;
//最后的任务信息
private StopWatch.TaskInfo lastTaskInfo;
//任务列表
private final List<StopWatch.TaskInfo> taskList;
//任务数量
private int taskCount;

//停止计时器,记录运行耗时
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);
}
//任务数量+1
++this.taskCount;
//停止
this.running = false;
//清空当前任务名
this.currentTaskName = null;
}
}

简单打印计时器耗时:.shortSummary()

1
2
3
4
//简单打印计时器耗时
public String shortSummary() {
return "StopWatch '" + this.getId() + "': running time (millis) = " + this.getTotalTimeMillis();
}

打印计时器详细信息:.prettyPrint()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//打印计时器详细信息
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[] var4 = this.getTaskInfo();
int var5 = var4.length;
for(int var6 = 0; var6 < var5; ++var6) {
StopWatch.TaskInfo task = var4[var6];
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();
}
-------------本文结束感谢您的阅读-------------

本文标题:【计时器】org.springframework.util.StopWatch

文章作者:DragonBaby308

发布时间:2019年11月26日 - 22:46

最后更新:2019年11月26日 - 22:48

原始链接:http://www.dragonbaby308.com/org-springframework-util-StopWatch/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%