20200110 org.springframework.util.StopWatch
简介
简单的秒表,允许为多个任务计时,公开总运行时间和每个命名任务的运行时间。
隐藏System.nanoTime()
的使用,从而提高了应用程序代码的可读性并减少了计算错误的可能性。
请注意,此对象并非设计为线程安全的,并且不使用同步。
此类通常用于在概念验证工作和开发过程中验证性能,而不是作为生产应用程序的一部分。
从Spring Framework 5.2开始,以纳秒为单位跟踪和报告运行时间。
使用
StopWatch
:构造器,可指定StopWatch的id,默认为空字符串("")getId
:获取StopWatch的id
,可通过构造函数指定,没有setter方法,默认为""setKeepTaskList
:设置keepTaskList
属性,默认为true,如果设置为false,调用getTaskInfo()
会报错,调用prettyPrint()
时,打印内容格式为:
StopWatch 'test': running time = 300520200 ns
No task info kept
-
start
:StopWatch 开始运行任务,可以通过入参指定taskName
,默认为空字符串("") -
currentTaskName
:返回当前运行任务的taskName
,如果StopWatch当前不在运行中,返回null
-
isRunning
:返回StopWatch是否仍在运行,在start()
和stop()
之间调用为true,否则为false -
stop
:StopWatch 停止执行任务 -
getTaskInfo
:以数组形式返回StopWatch的taskList
,如果keepTaskList
属性为false,抛出异常 -
getTaskCount
:返回StopWatch的任务数量 -
getLastTaskInfo
:返回上一个任务信息(TaskInfo
对象),如果之前没有运行过任务,即没有调用过stop()
,抛出异常 -
getLastTaskName
:返回上一个任务的任务名称,即taskName
-
getLastTaskTimeNanos
:返回上一个任务的运行时间,单位为ns
-
getLastTaskTimeMillis
:返回上一个任务的运行时间,单位为ms
-
getTotalTimeNanos
:返回StopWatch的总运行时间,单位为ns
-
getTotalTimeMillis
:返回StopWatch的总运行时间,单位为ms
-
getTotalTimeSeconds
:返回StopWatch的总运行时间,单位为s
-
prettyPrint
:返回格式化后的StopWatch的所有任务的执行信息,格式为:
StopWatch 'test': running time = 300009200 ns
---------------------------------------------
ns % Task name
---------------------------------------------
100146000 033% task1
199863200 067% task2
shortSummary
:返回StopWatch运行时间的简单描述toString
:返回StopWatch的所有任务的简单执行信息
示例
StopWatch sw = new StopWatch("test");
System.out.println("id = " + sw.getId()); // id = test
// sw.setKeepTaskList(false);
sw.start("task1");
{
// do something
System.out.println("currentTaskName = " + sw.currentTaskName()); // currentTaskName = task1
}
Thread.sleep(100);
sw.stop();
StopWatch.TaskInfo lastTaskInfo = sw.getLastTaskInfo();
System.out.println("TimeSeconds = " + lastTaskInfo.getTimeSeconds()); // TimeSeconds = 0.1001189
System.out.println("LastTaskName = " + sw.getLastTaskName()); // LastTaskName = task1
System.out.println("LastTaskTimeMillis = " + sw.getLastTaskTimeMillis()); // LastTaskTimeMillis = 100
System.out.println("LastTaskTimeNanos = " + sw.getLastTaskTimeNanos()); // LastTaskTimeNanos = 100118900
sw.start("task2");
{
// do something
System.out.println("currentTaskName = " + sw.currentTaskName()); // currentTaskName = task2
System.out.println("isRunning = " + sw.isRunning()); // isRunning = true
}
Thread.sleep(200);
sw.stop();
System.out.println("currentTaskName = " + sw.currentTaskName()); // currentTaskName = null
System.out.println(sw.prettyPrint());
/*
StopWatch 'test': running time = 300009200 ns
---------------------------------------------
ns % Task name
---------------------------------------------
100146000 033% task1
199863200 067% task2
*/
System.out.println("shortSummary = " + sw.shortSummary()); // StopWatch 'test': running time = 300458499 ns
System.out.println("getTaskCount = " + sw.getTaskCount()); // 2
System.out.println("getTotalTimeSeconds = " + sw.getTotalTimeSeconds() + " s"); // 0.301075301 s
System.out.println("getTotalTimeMillis = " + sw.getTotalTimeMillis() + " ms"); // 300 ms
System.out.println("getTotalTimeNanos = " + sw.getTotalTimeNanos() + " ns"); // 301075301 ns
System.out.println("isRunning = " + sw.isRunning()); // false
System.out.println(sw); // StopWatch 'test': running time = 300361899 ns; [task1] took 99972100 ns = 33%; [task2] took 200389799 ns = 67%
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)