统计代码耗时的工具 StopWatch

简介: 项目中通常会通过打印时间来查看某段任务的耗时,进行项目优化

统计代码耗时的工具

项目中通常会通过打印时间来查看某段任务的耗时,进行项目优化
通常会通过t2-t1的方式进行统计

public static void main(String[] args) throws InterruptedException {
     StopWatchTest.test0();
//        StopWatchTest.test1();
}

public static void test0() throws InterruptedException {
     long start = System.currentTimeMillis();
     // do something
     Thread.sleep(100);
    long end = System.currentTimeMillis();
    long start2 = System.currentTimeMillis();
    // do something
    Thread.sleep(200);
    long end2 = System.currentTimeMillis();
    System.out.println("任务1执行耗时:" + (end - start));
    System.out.println("任务2执行耗时:" + (end2 - start2));
}

spring StopWatch用法

spring-framework提供了一个StopWatch类可以做类似任务执行时间控制,也就是封装了一个对开始时间,结束时间记录操作的Java类,小例一则如下

栗子:

package com.example.stopwatch;

import org.springframework.util.StopWatch;


public class TestStopWatch {
    private void test() throws InterruptedException {
        StopWatch sw = new StopWatch();

        sw.start("任务1");
        Thread.sleep(1000);
        sw.stop();

        sw.start("任务2");
        Thread.sleep(2000);
        sw.stop();

        sw.start("任务3");
        Thread.sleep(500);
        sw.stop();

        System.out.println(sw.prettyPrint());
        System.out.println(sw.getTotalTimeMillis());
        System.out.println(sw.getLastTaskName());
        System.out.println(sw.getLastTaskInfo());
        System.out.println(sw.getTaskCount());
    }


    public static void main(String []argv) throws InterruptedException {
        TestStopWatch testStopWatch = new TestStopWatch();
        testStopWatch.test();
    }
}

结果

StopWatch '': running time (millis) = 3518
-----------------------------------------
ms     %     Task name
-----------------------------------------
00998  028%  任务1
02020  057%  任务2
00500  014%  任务3
 
3518
任务3
org.springframework.util.StopWatch$TaskInfo@5b2133b1
3

一个StopWatch实例一次只能开启一个task,不能同时start多个task,并且在该task未stop之前不能start一个新的task,必须在该task stop之后才能开启新的task,若要一次开启多个,需要new不同的StopWatch实例.

计时器工具-TimeInterval

Hutool通过封装TimeInterval实现计时器功能,即可以计算方法或过程执行的时间。

TimeInterval支持分组计时,方便对比时间。

使用

TimeInterval timer = DateUtil.timer();

//---------------------------------
//-------这是执行过程
//---------------------------------

timer.interval();//花费毫秒数
timer.intervalRestart();//返回花费时间,并重置开始时间
timer.intervalMinute();//花费分钟数

也可以实现分组计时:

final TimeInterval timer = new TimeInterval();

// 分组1
timer.start("1");
ThreadUtil.sleep(800);

// 分组2
timer.start("2");
ThreadUtil.sleep(900);

Console.log("Timer 1 took {} ms", timer.intervalMs("1"));
Console.log("Timer 2 took {} ms", timer.intervalMs("2"));
相关文章
|
Web App开发 容灾 安全
非功能关键知识总结
【2月更文挑战第4天】非功能关键知识总结
801 2
|
存储 Java 数据库连接
MyBatis-Plus 基础操作指南:实现高效的增删改查
MyBatis-Plus 基础操作指南:实现高效的增删改查
858 0
|
监控 Java
java多线程入门(六)Disruptor使用
java多线程入门(六)Disruptor使用
1091 0
|
监控 IDE Java
JRebel插件使用详解
JRebel插件使用详解
JRebel插件使用详解
|
5月前
|
人工智能 自然语言处理 数据可视化
AI重新定义体育直播
2024年的AI体育直播正以前所未有的方式革新观赛体验:进球瞬间生成多语言解说、预判精彩镜头、实时战术分析、自动生成集锦。AI不仅取代传统导播,还提供风格化解说、情绪化运镜和防作弊辅助,让比赛更智能、互动更丰富。开发者可借助开源工具入局,未来或将实现全息解说与脑机直连,为体育注入科技魅力!
|
3月前
|
人工智能 自然语言处理 安全
零成本打造智能服务端:MCP采样的降本增效实践
本文介绍MCP采样机制,突破传统单向调用模式,实现服务器与客户端LLM的双向协作,提升扩展性、降低成本,支持灵活模型选择。通过FastMCP框架,打造高效分布式AI计算架构。
339 8
|
SQL druid Java
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
7191 0