StopWatch计算计时工具类

转载 2016年06月01日 12:04:43
/**
 * 秒表类,用于计算执行时间
 * 注意该类是非线程安全的
 * @author jxqlovejava
 *
 */
public class StopWatch {
    
    private static final String DEFAULT_TASK_NAME = "defaultTask";
    private String taskName;
    private long start, end;
    private boolean hasStarted, hasEnded;
    
    // 时间单位枚举:毫秒、秒和分钟
    public enum TimeUnit { MILLI, SECOND, MINUTE  }
    
    public StopWatch() {
        this(DEFAULT_TASK_NAME);
    }
    
    public StopWatch(String taskName) {
        this.taskName = StringUtil.isEmpty(taskName) ? DEFAULT_TASK_NAME : taskName;
    }
    
    public void start() {
        start = System.currentTimeMillis();
        hasStarted = true;
    }
    
    public void end() {
        if(!hasStarted) {
            throw new IllegalOperationException("调用StopWatch的end()方法之前请先调用start()方法");
        }
        end = System.currentTimeMillis();
        hasEnded = true;
    }
    
    public void clear() {
        this.start = 0;
        this.end = 0;
        
        this.hasStarted = false;
        this.hasEnded = false;
    }
    
    /**
     * 获取总耗时,单位为毫秒
     * @return 消耗的时间,单位为毫秒
     */
    public long getEclapsedMillis() {
        if(!hasEnded) {
            throw new IllegalOperationException("请先调用end()方法");
        }
        
        return (end-start);
    }
    
    /**
     * 获取总耗时,单位为秒
     * @return 消耗的时间,单位为秒
     */
    public long getElapsedSeconds() {
        return this.getEclapsedMillis() / 1000;
    }
    
    /**
     * 获取总耗时,单位为分钟
     * @return 消耗的时间,单位为分钟
     */
    public long getElapsedMinutes() {
        return this.getEclapsedMillis() / (1000*60);
    }
    
    public void setTaskName(String taskName) {
        this.taskName = StringUtil.isEmpty(taskName) ? DEFAULT_TASK_NAME : taskName;
    }
    
    public String getTaskName() {
        return this.taskName;
    }
    
    /**
     * 输出任务耗时情况,单位默认为毫秒
     */
    public void printEclapseDetail() {
        this.printEclapseDetail(TimeUnit.MILLI);
    }
    
    /**
     * 输出任务耗时情况,可以指定毫秒、秒和分钟三种时间单位
     * @param timeUnit 时间单位
     */
    public void printEclapseDetail(TimeUnit timeUnit) {
        switch(timeUnit) {
        case MILLI:
            System.out.println(this.getTaskName() + "任务耗时(毫秒):" + this.getEclapsedMillis());
            break;
        case SECOND:
            System.out.println(this.getTaskName() + "任务耗时(秒):" + this.getElapsedSeconds());
            break;
        case MINUTE:
            System.out.println(this.getTaskName() + "任务耗时(分钟):" + this.getElapsedMinutes());
            break;
        default:
            System.out.println(this.getTaskName() + "任务耗时(毫秒):" + this.getEclapsedMillis());
        }
    }

}

相关文章推荐

rabbitMQ学习笔记(五) 消息路由

生产者会生产出很多消息 , 但是不同的消费者可能会有不同的需求,只需要接收指定的消息,其他的消息需要被过滤掉。 这时候就可以对消息进行过滤了。 在消费者端设置好需要接收的消息类型。 如果不使用默认...

spring cloud学习笔记(一):配置服务器搭建

文章参考来源: lzhou666的 http://www.cnblogs.com/skyblog/p/5129603.html要使用spring cloud分布式配置文件总体上分为3个大的步骤:1.首...
  • aofavx
  • aofavx
  • 2017年02月09日 16:28
  • 3750

java工具类系列 (二.StopWatch)

StopWatch 提供一个时间片记录的API,该类是有apache下lang包中提供的,另外可以参考spring框架中的一个类似工具类,实现效果稍微不同,但都是提供一个时间记录功能,见另一篇:htt...
  • lxzo123
  • lxzo123
  • 2011年09月19日 11:27
  • 16675

Stopwatch工具类

现在我的一部分工作就是优化客户端的性能,比如优化列表快速滑动卡顿现象。 一个很好的办法就是使用DDMS的Method Profiling功能,它可以生成一个表格来显示app中所有执行的方法的...

倒计时工具类

  • 2016年06月29日 12:57
  • 20.08MB
  • 下载

android倒计时工具类

  • 2016年11月25日 16:38
  • 2KB
  • 下载

【常用工具类】验证码倒计时帮助类的实现

我们在做有关短信验证码功能的时候,为了防止用户无休止的获取短信验证码,或者是误操作,造成验证码混乱的情况,我们一般在获取验证码功能的Button上面加上倒计时功能,从而限制用户获取验证码的间隔。Cou...

倒计时工具类,listview的item计时器

listview中的item,倒计时,设置倒计时时长及倒计时间隔

干货三:CountDownTimer倒计时工具类

概述毫无疑问,我们先来看下官方文档中给的介绍CountDownTimer官方定义如下: Schedule a countdown until a time in the future, with ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:StopWatch计算计时工具类
举报原因:
原因补充:

(最多只允许输入30个字)