一.应用背景
今天,组长交给一个很高大上的任务,优化某个功能的程序速度,打开代码一看,全是业务代码,直接脑洞爆炸,对于新接触业务的人直接猝死。只能摒弃观看代码,上工具进行测试了。
二.以往回顾介绍
在很久以前,我们进行方法时间性能测试,一般都会运用currentTimeMillis来进行(如下测试代码),但是这样代码量很多,并且不能集中直观的查看。
public static void test() throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(100);
long end = System.currentTimeMillis();
System.out.println("执行耗时:" + (end - start));
}
三.StopWatch方法及应用
对于以上问题,StopWatch进行了很大的集成,StopWatch是org.springframework.util中的一个类,属于spring-core jar包中的一部分,
1.StopWatch的方法简介:
方法 | 描述介绍 |
---|---|
void start() | 开始一个新的监测任务,可设置任务名称。记录当前时间和任务名称。 |
void stop() | 结束当前监测任务。记录任务执行时间,更新总执行时间和任务数量。 |
void setKeepTaskList(boolean keepTaskList) | 设置是否保留所有记录的监测任务,默认为true。 如果该值为true,则程序可以通过getTaskInfo()方法获取所有监测任务的详细信息。 |
String getId() | 获取唯一标识符。 |
String currentTaskName() | 获取当前正在运行的监测任务名称。 |
TaskInfo getLastTaskInfo() | 获取最后一次执行的监测任务的详细信息,包括任务名称、开始时间、结束时间和执行时间等。 |
String getLastTaskName() | 获取最后一次执行的监测任务的任务名称。 |
long getLastTaskTimeMillis() | 获取最后一次执行的监测任务的执行时间,单位毫秒。 |
long getLastTaskTimeNanos() | 获取最后一次执行的监测任务的执行时间,单位纳秒。 |
int getTaskCount() | 获取已执行的监测任务数目。 |
Tasklnfo[] getTasklnfo() | 获取所有监测任务信息,仅在keepTaskList属性为true时有效, |
double getTotalTimeSeconds() | 获取所有监测任务的总执行时间,单位为秒。 |
long getTotalTimeMillis() | 获取所有监测任务的总执行时间,单位为毫秒。 |
long getTotalTimeNanos() | 获取所有监测任务的总执行时间,单位为纳秒。 |
boolean isRunning() | 判断当前StopWatch对象是否正在执行监测任务。 |
String shortSummary() | 以字符串形式输出所有监测任务的简要信息,包括任务数目和总执行时间。 |
String prettyPrint() | 以字符串形式输出所有监测任务的执行时间和详细信息。 |
2.StopWatch方法应用
我们在开发中其实主要应用到的就是 start() 、 stop()、getTotalTimeMillis()、getTaskCount()、getTaskInfo()、prettyPrint()方法。
public void stopwatchTest(){
StopWatch sw = new StopWatch();
sw.start("1");
//方法
sw.stop();
sw.start("2");
//方法
sw.stop();
sw.start("3");
//方法
sw.stop();
sw.start("4");
//方法
sw.stop();
System.out.println("所有任务总耗时:" + sw.getTotalTimeMillis());
System.out.println("任务总数:" + sw.getTaskCount());
System.out.println("所有任务详情:" + sw.getTaskInfo());
System.out.println("所有任务详情:" + sw.prettyPrint());
}
以上就是测试代码,最后console打印出来的数据如下(实际开发截图)
四.总结
以上就是对StopWatch的了解和实际开发中大家可以应用,对生产中方法调用及从controller --> service --> dao整个流程性能监控也很有帮助,不得不提醒的是在应用的过程中一定要当在合理得当的位置。