在最近代码codereview中,发现代码中大量使用了StopWatch 这个类去监视执行的时间。这里总结一下大概的介绍。StopWatch 在spring中和apache中均提供了类似的功能,这里分别介绍一下。
一、Apache下的StopWatch
StopWath是apache commons lang包下的一个任务执行时间监视器,具体位置是org.apache.commons.lang3.time,常用的api 如下:
主要方法:
start(); //开始计时
split(); //设置split点
getSplitTime(); //获取从start 到 最后一次split的时间
reset(); //重置计时
suspend(); //暂停计时, 直到调用resume()后才恢复计时
resume(); //恢复计时
stop(); //停止计时
getTime(); //统计从start到现在的计时
使用demo如下:
import org.apache.commons.lang3.time.StopWatch;
public class StopWatchTest
{
public static void main(String[] args) throws InterruptedException {
StopWatch watch = new StopWatch();
watch.start();
//统计从start开始经历的时间
Thread.sleep(1000);
System.out.println(watch.getTime());
//统计计时点
Thread.sleep(1000);
watch.split();
System.out.println(watch.getSplitTime());
//统计计时点
Thread.sleep(1000);
watch.split();
System.out.println(watch.getSplitTime());
//复位后, 重新计时
watch.reset();
watch.start();
Thread.sleep(1000);
System.out.println(watch.getTime());
//暂停 与 恢复
watch.suspend();
System.out.println("暂停2秒钟");
Thread.sleep(2000);
watch.resume();
Thread.sleep(1000);
watch.stop();
System.out.println(watch.getTime());
}
}
二、spring中的stopwatch
该类存在于org.springframework.util.StopWatch ,特点是StopWatch该类在统计时间的时候,必须得前一个对象关闭才能创建新的StopWatch,并且在统计完成后,只需要将其输出,就可以像报表一样,显示统计的时间
在开发中,常用于统计时间的是 使用 System.currentTimeMillis();进行统计,并且当执行完毕后,
还需要相减,才能得到最终时间值,这里直接提供了获取功能
public static void main(String[] args) throws InterruptedException {
StopWatch sw = new StopWatch();
sw.start("读取文件");
Thread.sleep(1000);
sw.stop();
sw.start("文件删除");
Thread.sleep(100);
sw.stop();
sw.start("文件拷贝");
Thread.sleep(10);
sw.stop();
System.out.println(sw.prettyPrint());
long stime =System.currentTimeMillis();
Thread.sleep(1000);
long etime =System.currentTimeMillis();
System.out.println("执行时间:"+(etime-stime));
}