# Java语言中两种常用的计时器

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:19:00.000Z
> 分类: 推荐奖励
> 标签: 安全, Java
> 原文链接: http://117.50.162.249:3000/yun/articles/1502

---

# Java语言中两种常用的计时器

> 来源: https://www.ucloud.cn/yun/129347.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:19

Java语言中两种常用的计时器

**点击上方“IT那活儿****”公众号，关注后了解更多内容，不管IT什么活儿，干就完了！！！**

**代码中经常会用到一些计时器来记录某个逻辑的使用时间，****那么哪种计时器好用且优雅****，下面我们来使用和对比一下。**

System.currentTimeMillis()

首先是我们最常用的System.currentTimeMillis()，相信非常多的人看到计时器的第一反应就是想到他，这个计时器表较简单功能单一，可是如果一个方法中用多了也很让人感觉冗余，看起来也并不是很优雅。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_000.png)

StopWatch工具类

那么StopWatch这个工具类呢我也是最近才接触的，**重点推荐大家使用。**它是org.springframework.util包下的一个工具类，那么对于它的用法呢我们今天来简单的研究一下。

首先进入StopWatch类，看一下类成员以及方法，熟悉一下方便我们接下来的使用。**它的类成员：**

- taskList
- startTimeMillis
- currentTaskName
- lastTaskInfo
- taskCount
- totalTimeMillis

我们大致可以看出这个类会统计任务数，总耗时等信息，接下来我们开始使用。

**首先**引入jar包，Spring Boot已经引入该包。

```
<dependency><groupId>org.springframeworkgroupId><artifactId>spring-coreartifactId><version>${spring.version}version>dependency>
```

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_001.png)

简单试用一下统计用时等方法：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_002.png)

这个使用时需要注意获取用时统计、任务数量需要在stop方法之后不然将无法获取。

然而有些方法就需要在stop方法之前使用，比如说currentTaskName获取当前正在执行的任务名如下图：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_003.png)

**当然还有更好用的方法**：prettyPrint获取任务执行信息如下图，这个方法看起来**就很高大上**。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_004.png)

那么来一个多个任务统计用时和数量的例子，如下图：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_005.png)

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_006.png)

从统计结果可以看出，这里统计的还是比较详细的。

**StopWatch工具类还有更多好用方法，这里我总结了一下如下图：**

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_007.png)

**使用StopWatch类时需要注意以下几点：**

- StopWatch不是设计为线程安全的，并且不使用同步。
- 一个StopWatch实例一次只能开启一个task，不能同时start多个task，在该task还没stop之前不能start一个新的task，必须在该task stop之后才能开启新的task。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_008.png)

## 本文作者：段席超（上海新炬王翦团队）

## 本文来源：“IT那活儿”公众号

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129347/images/129347_009.png)