前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

一、StopWatch- Spring

StopWatch 对象不是设计为线程安全的,并且不使用同步。

⬤ 一个 StopWatch 实例一次只能开启一个 task ,不能同时 start 多个 task

⬤ 在该 task 还没 stop 之前不能 start 一个新的 task ,必须在该 task stop 之后才能开启新的task

⬤ 若要一次开启多个,需要 new 不同的 StopWatch 实例

1、pom

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>${spring.version}</version>
</dependency>

2、TestMain

@Test
public void test() throws InterruptedException {

  StopWatch stopWatch = new StopWatch();

  // 任务一模拟休眠3秒钟
  stopWatch.start("TaskOneName");
  Thread.sleep(1000 * 3);
  log.info("当前任务名称:{}", stopWatch.currentTaskName());
  //当前任务名称:TaskOneName
  if (stopWatch.isRunning()) {
    stopWatch.stop();
  }

  // 任务一模拟休眠10秒钟
  stopWatch.start("TaskTwoName");
  Thread.sleep(1000 * 10);
  log.info("当前任务名称:{}", stopWatch.currentTaskName());
  //当前任务名称:TaskTwoName
  if (stopWatch.isRunning()) {
    stopWatch.stop();
  }

  // 打印出耗时
  log.info("stopWatch.prettyPrint():{}", stopWatch.prettyPrint());
  //	stopWatch.prettyPrint():StopWatch '': running time (millis) = 13016
	//	-----------------------------------------
	//	ms     %     Task name
	//	-----------------------------------------
	//	03015  023%  TaskOneName
	//	10001  077%  TaskTwoName

  log.info("stopWatch.shortSummary():{}", stopWatch.shortSummary());
  // stopWatch.shortSummary():StopWatch '': running time (millis) = 13016
  // stop后它的值为null
  log.info("stopWatch.currentTaskName():{}", stopWatch.currentTaskName());
  // stopWatch.currentTaskName():null

  // 最后一个任务的相关信息
  log.info("stopWatch.getLastTaskName():{}", stopWatch.getLastTaskName());
  //stopWatch.getLastTaskName():TaskTwoName
  log.info("stopWatch.getLastTaskInfo():{}", stopWatch.getLastTaskInfo());
  // stopWatch.getLastTaskInfo():org.springframework.util.StopWatch$TaskInfo@73f792cf

  // 任务总的耗时  如果你想获取到每个任务详情(包括它的任务名、耗时等等)可使用
  log.info("所有任务总耗时:{}", stopWatch.getTotalTimeMillis());
	// 所有任务总耗时13016
  log.info("任务总数:{}", stopWatch.getTaskCount());
  //  任务总数2
  log.info("所有任务详情:{}", stopWatch.getTaskInfo());
  // 所有任务详情org.springframework.util.StopWatch$TaskInfo@2ed94a8b
}

二、StopWatch.apache


 @Test
  public void test() throws InterruptedException {

      //创建后立即start,常用
      StopWatch watch = StopWatch.createStarted();
      // StopWatch watch = new StopWatch();
      // watch.start();

      Thread.sleep(1000);
      System.out.println(StrUtil.format("统计从开始到现在运行时间:{} ms", watch.getTime()));
      // 统计从开始到现在运行时间:1006ms

      // 复位后, 重新计时
      watch.reset();
      watch.start();
      Thread.sleep(1000);
      System.out.println(StrUtil.format("重新开始后到当前运行时间是:{} ms", watch.getTime()));
      // 重新开始后到当前运行时间是:1006 ms

      // 暂停 与 恢复
      watch.suspend();
      System.out.println("暂停2秒钟");
      Thread.sleep(2000);

      // 上面suspend,这里要想重新统计,需要恢复一下
      watch.resume();
      System.out.println(StrUtil.format("恢复后执行的时间是:{} ms", watch.getTime()));
      // 恢复后执行的时间是:1001 ms

      Thread.sleep(1000);
      watch.stop();
      // 花费的时间》》:2010 ms
      System.out.println(StrUtil.format("花费的时间》》:{} ms", watch.getTime()));
      // 花费的时间》》:2004 ms

      // 转成 s
      System.out.println(StrUtil.format("花费的时间》》:{} s", watch.getTime(TimeUnit.SECONDS)));
      // 花费的时间》》:2 s
  }

}

ContactAuthor