程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 克隆

  • 类型转换

  • 日期时间

  • IO流相关

    • 日期时间工具 - `DateUtil`
    • 日期时间对象 - `DateTime`
    • 农历日期 - `ChineseDate`
    • LocalDateTime 工具类 - `LocalDateTimeUtil`
    • 计时器工具 - `TimeInterval`
      • 1. 背景介绍
      • 2. 基本计时操作
        • 示例代码
        • API 说明
        • 实际开发场景
      • 3. 分组计时操作
        • 示例代码
        • API 说明
        • 实际开发场景
      • 4. 其他实用功能
        • 4.1 设置计时精度
        • 4.2 判断是否超过指定时间
    • 文件

    • 资源

  • 工具类

  • 语言特性

  • JavaBean

  • 集合类

  • Map

  • Codec编码

  • 文本操作

  • 注解

  • 比较器

  • 异常

  • 数学

  • 线程和并发

  • 图片

  • 网络

  • 源码编译

  • 配置文件

  • 日志

  • 缓存

  • JSON

  • 加密解密

  • DFA查找

  • HTTP客户端

  • 定时任务

  • 扩展

  • 切面

  • 脚本

  • Office文档操作

  • 系统调用

  • 图形验证码

  • 网络Socket

  • JWT

  • Hutoll
  • IO流相关
scholar
2024-08-20
目录

计时器工具 - TimeInterval

# 计时器工具 - TimeInterval

# 1. 背景介绍

在进行性能优化和分析时,准确地测量代码的执行时间至关重要。Java 中可以使用 System.currentTimeMillis() 或 System.nanoTime() 进行时间测量,但这些方式操作繁琐且不便于管理复杂的计时需求。为了解决这些问题,Hutool 提供了 TimeInterval 计时器工具类,能够方便地进行多种计时操作,包括基本的单次计时和复杂的分组计时。

# 2. 基本计时操作

TimeInterval 支持从计时器启动到某一时刻的时间间隔测量,默认单位为毫秒。该功能适用于简单的时间测量,如记录一个方法或代码块的执行时间。

# 示例代码

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;

public class TimeIntervalExample {
    public static void main(String[] args) {
        // 创建一个计时器对象
        TimeInterval timer = DateUtil.timer();

        // 模拟执行过程(如处理任务、数据库查询等)
        performTask();

        // 获取自启动以来的时间间隔,单位为毫秒
        long intervalMs = timer.interval();
        System.out.println("任务执行时间:" + intervalMs + " 毫秒");

        // 获取间隔时间并重置计时器
        long intervalRestartMs = timer.intervalRestart();
        System.out.println("重置后的任务执行时间:" + intervalRestartMs + " 毫秒");

        // 获取时间间隔,单位为分钟
        long intervalMinutes = timer.intervalMinute();
        System.out.println("任务执行时间(分钟):" + intervalMinutes + " 分钟");
    }

    private static void performTask() {
        // 模拟执行一个耗时操作
        try {
            Thread.sleep(1500); // 暂停1.5秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# API 说明

  • interval():获取从计时器启动到调用此方法时的时间间隔,单位为毫秒。

    • 作用:计算代码块或方法的执行时间,适用于单次计时。
    • 返回值:long 类型,表示时间间隔(以毫秒为单位)。
  • intervalRestart():获取时间间隔并重置计时器,单位为毫秒。

    • 作用:获取时间间隔后立即重置计时器的起始时间,用于连续测量多个步骤的执行时间。
    • 返回值:long 类型,表示时间间隔(以毫秒为单位)。
  • intervalMinute():获取从计时器启动到调用此方法时的时间间隔,单位为分钟。

    • 作用:将时间间隔转换为分钟,适用于较长时间的测量。
    • 返回值:long 类型,表示时间间隔(以分钟为单位)。

# 实际开发场景

在实际开发中,基本计时操作适用于评估单个任务或方法的性能。例如,计算一个数据库查询、文件处理或网络请求的执行时间,以便进行性能分析和优化。

public class Application {
    public static void main(String[] args) {
        // 创建计时器
        TimeInterval timer = DateUtil.timer();

        // 执行任务
        executeDatabaseQuery();

        // 输出执行时间
        System.out.println("数据库查询耗时:" + timer.interval() + " 毫秒");
    }

    private static void executeDatabaseQuery() {
        // 模拟数据库查询操作
        try {
            Thread.sleep(500); // 暂停0.5秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 3. 分组计时操作

TimeInterval 提供了分组计时功能,可以为不同的操作设置独立的计时组,并分别获取各自的执行时间。该功能非常适合在复杂流程中对多个步骤进行性能比较。

# 示例代码

import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.thread.ThreadUtil;

public class GroupedTimeIntervalExample {
    public static void main(String[] args) {
        // 创建计时器
        TimeInterval timer = new TimeInterval();

        // 开始分组1的计时
        timer.start("step1");
        ThreadUtil.sleep(800); // 模拟执行过程

        // 开始分组2的计时
        timer.start("step2");
        ThreadUtil.sleep(1200); // 模拟执行过程

        // 获取分组1的时间间隔
        long step1Time = timer.intervalMs("step1");
        System.out.println("Step 1 执行时间:" + step1Time + " 毫秒");

        // 获取分组2的时间间隔
        long step2Time = timer.intervalMs("step2");
        System.out.println("Step 2 执行时间:" + step2Time + " 毫秒");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# API 说明

  • start(String id):启动指定分组的计时。

    • 作用:为特定操作创建一个独立的计时组,用于多步骤或并行任务的时间测量。
    • 参数:
      • id:分组的标识符,用于区分不同的计时组。
  • intervalMs(String id):获取指定分组的时间间隔,单位为毫秒。

    • 作用:获取特定分组的时间间隔,适用于分步骤性能分析。
    • 参数:
      • id:分组的标识符,对应 start 方法中的 id。
    • 返回值:long 类型,表示时间间隔(以毫秒为单位)。

# 实际开发场景

分组计时在需要比较不同操作执行时间的场景中尤为有用。例如,在对比不同算法的性能或分析多步骤任务的耗时时,分组计时可以帮助开发者找出性能瓶颈。

public class Application {
    public static void main(String[] args) {
        TimeInterval timer = new TimeInterval();

        // 测试算法A
        timer.start("algorithmA");
        executeAlgorithmA();
        long timeA = timer.intervalMs("algorithmA");

        // 测试算法B
        timer.start("algorithmB");
        executeAlgorithmB();
        long timeB = timer.intervalMs("algorithmB");

        // 输出比较结果
        System.out.println("算法A耗时:" + timeA + " 毫秒");
        System.out.println("算法B耗时:" + timeB + " 毫秒");
    }

    private static void executeAlgorithmA() {
        // 模拟算法A的执行
        ThreadUtil.sleep(700);
    }

    private static void executeAlgorithmB() {
        // 模拟算法B的执行
        ThreadUtil.sleep(1200);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 4. 其他实用功能

# 4.1 设置计时精度

在某些情况下,可能需要以更高的精度(例如纳秒)进行时间测量。TimeInterval 支持设置精度,以满足不同的性能分析需求。

TimeInterval timer = new TimeInterval(true); // 启用高精度计时
1

# 4.2 判断是否超过指定时间

可以使用 isTimeout 方法判断某段代码的执行时间是否超过预期值,这在超时控制中非常实用。

// 创建计时器
TimeInterval timer = new TimeInterval();

// 模拟耗时操作
ThreadUtil.sleep(500);

// 判断是否超过预期时间(400毫秒)
boolean isTimeout = timer.isTimeout(400);
System.out.println("是否超时:" + isTimeout); // 输出:是否超时:true
1
2
3
4
5
6
7
8
9

API 说明

  • isTimeout(long timeoutMs):判断时间间隔是否超过指定值。
    • 作用:用于超时判断和控制。
    • 参数:
      • timeoutMs:超时时间,单位为毫秒。
    • 返回值:布尔值,true 表示已超时,false 表示未超时。

总结

TimeInterval 工具类在性能分析和优化中非常实用。它不仅提供了简单易用的基本计时功能,还支持分组计时、超时判断等高级特性,能够满足多种场景下的计时需求。在实际开发中,通过合理使用 TimeInterval,可以帮助开发者轻松评估和优化代码性能。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
LocalDateTime 工具类 - `LocalDateTimeUtil`
文件读取 - `FileReader`

← LocalDateTime 工具类 - `LocalDateTimeUtil` 文件读取 - `FileReader`→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式