StopWatch秒表工具类教学

447 阅读2分钟

简介

StopWatch是一个位于org.springframework.util的基础类,其实StopWatch的实现类有很多,但是今天我们讲一个最基础的,spirng下的StopWatch,无需依赖第三方包。

使用场景

StopWatch翻译是秒表的意思,正如字面意思这个类具有着秒表所拥有的的功能,常用于统计花费时间场景。我们日常使用的比较多的可能是System.currentTimeMillis(),而StopWatch比其写法更简洁,性能更优秀。

写法对比

// 常用写法
long time = System.currentTimeMillis();
long spendTimeMillis = System.currentTimeMillis() - System.currentTimeMillis();
long spendTimeSeconds = spendTimeMillis / 1000;
long spendTimeNanos = spendTimeMillis * 1000;
// StopWatch写法
StopWatch stopWatch = new StopWatch();
stopWatch.start();
stopWatch.stop();
stopWatch.getTotalTimeSeconds();
stopWatch.getTotalTimeMillis();
stopWatch.getTotalTimeNanos();

使用教程

创建实例

// 创建普通实例
StopWatch stopWatch = new StopWatch();
// 创建具有唯一键的实例
StopWatch stopWatch = new StopWatch("id");

启动

// 普通启动
stopWatch.start();
// 启动具有唯一任务名称的方式
stopWatch.start(taskName);

终止

stopWatch.stop();

终止当前启动的任务。

构建任务信息

stopWatch.setKeepTaskList(true);

可以在启动后或者终止后执行,会记录所有启用后并执行过的任务信息

获取任务信息

// 获取最后执行的任务信息
stopWatch.getLastTaskInfo();
// 获取执行过的任务信息列表
stopWatch.getTaskInfo();

获取执行过并记录的任务信息,和构建任务信息方法是成对使用,任务信息对象可以获取到当前任务的任务名称及不同时间单位的执行时间(秒、毫秒和微秒)。

获取当前执行过的任务执行时间

// 获取当前时间单位为秒的任务执行时间
stopWatch.getTotalTimeSeconds();
// 获取当前时间单位为毫秒的任务执行时间
stopWatch.getTotalTimeMillis();
// 获取当前时间单位为微秒的任务执行时间
stopWatch.getTotalTimeNanos();
  1. 任务执行时间只有在任务结束(stop方法)以后才可以执行并获取到时间,否则获取时间是0。
  2. 当任务下次再启动并结束,不会刷新该时间,任务结束可以理解为秒表的暂停功能。
  3. 如果需要知道每个任务的执行时间,可以去查任务信息列表(getTaskInfo),找到对应的任务时间

获取执行过的任务次数

stopWatch.getTaskCount();

获取执行过的任务次数,即执行过stop的次数。

获取秒表执行状态

stopWatch.isRunning();

默认为false,执行过start为true,执行过stop为false。