在我们写代码的时候为了统计方法或者代码块的耗时,往往需要自己写代码来统计。下面是常用的几种。
1、使用System的自带时间:
long start = System.currentTimeMillis();
TimeUnit.SECONDS.sleep(3L);
System.out.println("it consumes " +(System.currentTimeMillis() - start) + "ms");
// output : consumes 3004ms
优点:系统自带,统计时间单位到:毫秒。(还有一个纳秒的版本。System.nanoTime())
缺点:不能重用代码,每次都需要重新写一个 start 的时间起点。
2、使用 org.apache.commons.lang.time.StopWatch
public static void testStopWatch() throws InterruptedException {
System.out.println("SLAMonitorThread.main() start");
StopWatch sw = new StopWatch();
sw.start();
TimeUnit.SECONDS.sleep(1L);
sw.split();
System.out.println(
"SLAMonitorThread.main() end. split:" + sw.getSplitTime() + ", " + sw.toSplitString());
TimeUnit.SECONDS.sleep(1L);
sw.split();
System.out.println(
"SLAMonitorThread.main() end. split:" + sw.getSplitTime() + ", " + sw.toSplitString());
TimeUnit.SECONDS.sleep(1L);
sw.split();
System.out.println(
"SLAMonitorThread.main() end. split:" + sw.getSplitTime() + ", " + sw.toSplitString());
TimeUnit.SECONDS.sleep(1L);
System.out.println("SLAMonitorThread.main() end. end:" + sw.getTime() + ", " + sw.toString());
long start = System.currentTimeMillis();
TimeUnit.SECONDS.sleep(1L);
System.out.println("it consumes " + (System.currentTimeMillis() - start) + "ms");
/*
* SLAMonitorThread.main() start
* SLAMonitorThread.main() end. split:1005, 0:00:01.005
* SLAMonitorThread.main() end. split:2016, 0:00:02.016
* SLAMonitorThread.main() end. split:3021, 0:00:03.021
* SLAMonitorThread.main() end. end:4025, 0:00:04.025
* it consumes 1004ms
*/
}
优点:可以多次使用,使用split即可多次使用。
缺点:需要依赖于额外的commons的jar
3、guava 的 StopWatch
和 org.apache.commons.lang.time.StopWatch 的用法类似。
4、非常好用的计算耗时的工具类:
org.apache.commons.lang.time.DurationFormatUtils.java