Spring定时器StopWatch

简单总结一句,Spring提供的计时器StopWatch对于秒、毫秒为单位方便计时的程序,尤其是单线程、顺序执行程序的时间特性的统计输出支持比较好。也就是说假如我们手里面有几个在顺序上前后执行的几个任务,而且我们比较关心几个任务分别执行的时间占用状况,希望能够形成一个不太复杂的日志输出,StopWatch提供了这样的功能。而且Spring的StopWatch基本上也就是仅仅为了这样的功能而实现。

 

实际中用到的代码:

public void run() {
	LOGGER.info("[" + taskName + "]开始执行");
        StopWatch stopWatch = new StopWatch();
        stopWatch.start(taskName);
        try {
            doTask();
        } catch (Exception e) {
            LOGGER.error("[" + taskName + "]执行失败", e);
        } finally {
            stopWatch.stop();
            LOGGER.info("[" + taskName + "]执行结束,耗时:" + stopWatch.getTotalTimeMillis() + "毫秒");
        }
}
public void run() {
	LOGGER.info("[" + taskName + "]开始执行");
        StopWatch stopWatch = new StopWatch();
        stopWatch.start(taskName);
        try {
            doTask();
        } catch (Exception e) {
            LOGGER.error("[" + taskName + "]执行失败", e);
        } finally {
            stopWatch.stop();
            LOGGER.info("[" + taskName + "]执行结束,耗时:" + stopWatch.getTotalTimeMillis() + "毫秒");
        }
}

 

另外,还可以使用一些其他的方法:

import org.springframework.util.StopWatch;  
  
public class StopWatchDemo {  
  
    /** 
     * @param args 
     * @throws InterruptedException 
     */  
    public static void main(String[] args) throws InterruptedException {  
        // TODO Auto-generated method stub  
        StopWatch clock = new StopWatch();  
        clock.start("TaskOneName");  
        Thread.sleep(1000 * 3);// 任务一模拟休眠3秒钟  
        clock.stop();  
        clock.start("TaskTwoName");  
        Thread.sleep(1000 * 10);// 任务一模拟休眠10秒钟  
        clock.stop();  
        clock.start("TaskThreeName");  
        Thread.sleep(1000 * 10);// 任务一模拟休眠10秒钟  
        clock.stop();  
  
        System.out.println(clock.prettyPrint());  
    }  
  
}
import org.springframework.util.StopWatch;  
  
public class StopWatchDemo {  
  
    /** 
     * @param args 
     * @throws InterruptedException 
     */  
    public static void main(String[] args) throws InterruptedException {  
        // TODO Auto-generated method stub  
        StopWatch clock = new StopWatch();  
        clock.start("TaskOneName");  
        Thread.sleep(1000 * 3);// 任务一模拟休眠3秒钟  
        clock.stop();  
        clock.start("TaskTwoName");  
        Thread.sleep(1000 * 10);// 任务一模拟休眠10秒钟  
        clock.stop();  
        clock.start("TaskThreeName");  
        Thread.sleep(1000 * 10);// 任务一模拟休眠10秒钟  
        clock.stop();  
  
        System.out.println(clock.prettyPrint());  
    }  
  
}

 

控制台输出如下:
StopWatch '': running time (millis) = 22926
-----------------------------------------
ms     %     Task name
-----------------------------------------
02990  013%  TaskOneName
09968  043%  TaskTwoName
09968  043%  TaskThreeName

 

 

http://blog.csdn.net/ioe_gaoyong/article/details/22788789

 

posted @   乐在克里特  阅读(521)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
点击右上角即可分享
微信分享提示