一、总结
1.1、使用System.currentTimeMillis();计算程序执行毫秒数
- // 开始时间1
- long startTime1 = System.currentTimeMillis();
- Thread.sleep(100);
- // 结束时间1
- long endTime1 = System.currentTimeMillis();
- // 开始时间2
- long startTime2 = System.currentTimeMillis();
- Thread.sleep(200);
- // 结束时间2
- long endTime2 = System.currentTimeMillis();
- System.out.println("逻辑1执行时间:"+ (endTime1 - startTime1));
- System.out.println("逻辑2执行时间:"+ (endTime2 -startTime2));
复制代码 1.2、使用org.springframework.util包下的一个工具类StopWatch计算执行时间
- StopWatch testTask = new StopWatch("TestTask");
- // 记录开始时间点
- testTask.start("task1");
- Thread.sleep(100);
- // 记录结束时间点
- testTask.stop();
- // 记录开始时间点
- testTask.start("task2");
- Thread.sleep(200);
- // 记录结束时间点
- testTask.stop();
- // 输出执行时间
- System.out.println("==任务执行时间==");
- System.out.println(testTask.prettyPrint());
- System.out.println("执行任务的毫秒数:"+testTask.getTotalTimeMillis());
复制代码 1.3两个案例的完整代码、执行结果
- package time.stopwatch;import org.springframework.util.StopWatch;public class StopWatchTest { public static void main(String[] args) throws InterruptedException { // 计算执行时间 calculateExecuteTime1(); // 计算执行时间 calculateExecuteTime2(); } public static void calculateExecuteTime1() throws InterruptedException { // 开始时间1
- long startTime1 = System.currentTimeMillis();
- Thread.sleep(100);
- // 结束时间1
- long endTime1 = System.currentTimeMillis();
- // 开始时间2
- long startTime2 = System.currentTimeMillis();
- Thread.sleep(200);
- // 结束时间2
- long endTime2 = System.currentTimeMillis();
- System.out.println("逻辑1执行时间:"+ (endTime1 - startTime1));
- System.out.println("逻辑2执行时间:"+ (endTime2 -startTime2)); } public static void calculateExecuteTime2() throws InterruptedException { StopWatch testTask = new StopWatch("TestTask");
- // 记录开始时间点
- testTask.start("task1");
- Thread.sleep(100);
- // 记录结束时间点
- testTask.stop();
- // 记录开始时间点
- testTask.start("task2");
- Thread.sleep(200);
- // 记录结束时间点
- testTask.stop();
- // 输出执行时间
- System.out.println("==任务执行时间==");
- System.out.println(testTask.prettyPrint());
- System.out.println("执行任务的毫秒数:"+testTask.getTotalTimeMillis()); }}
复制代码 执行结果:
- 逻辑1执行时间:109
- 逻辑2执行时间:203
- ==任务执行时间==
- StopWatch 'TestTask': running time = 319076700 ns
- ---------------------------------------------
- ns % Task name
- ---------------------------------------------
- 114748000 036% task1
- 204328700 064% task2
- 执行任务的毫秒数:319
复制代码 1.4 StopWatch优缺点:
优点:
1、spring自带工具类,可直接使用
2、代码实现简单,使用更简单
3、统一归纳,展示每项任务耗时与占用总时间的百分比,展示结果直观
4、性能消耗相对较小,并且最大程度的保证了start与stop之间的时间记录的准确性
5、可在start时直接指定任务名字,从而更加直观的显示记录结果
缺点:
1、一个StopWatch实例一次只能开启一个task,不能同时start多个task,并且在该task未stop之前不能start一个新的task,必须在该task stop之后才能开启新的task,若要一次开启多个,需要new不同的StopWatch实例
2、代码侵入式使用,需要改动多处代码
1.5、spring中StopWatch源码实现如下:
原文摘录至:https://blog.csdn.net/gxs1688/article/details/87185030
致敬原作者:一个不二,侵删。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |