用StopWatch优雅替代currentTimeMillis计算程序执行耗时

需求

有时需要记录程序执行时间,最简单就是打印当前时间与执行完时间的差值,缺点是:

  • 执行大量测试的话就很麻烦
  • 不直观
  • 如果想对执行的时间做进一步控制,则需要在程序中很多地方修改

于是 Spring提供了一个StopWatch类可以做类似任务执行时间控制,即封装了一个对开始时间,结束时间记录工具

案例

统计输出总耗时

import org.springframework.util.StopWatch;

public class SpringStopWatchExample {

    public static void main (String[] args) throws InterruptedException {
        StopWatch sw = new StopWatch();
        sw.start();
        //long task simulation
        Thread.sleep(1000);
        sw.stop();
        System.out.println(sw.getTotalTimeMillis());
    }
}

输出最后一个任务的耗时

public class SpringStopWatchExample2 {

    public static void main (String[] args) throws InterruptedException {
        StopWatch sw = new StopWatch();
        sw.start("A");//setting a task name
        //long task simulation
        Thread.sleep(1000);
        sw.stop();
        System.out.println(sw.getLastTaskTimeMillis());
    }
}

以优雅的格式打出所有任务的耗时以及占比

import org.springframework.util.StopWatch;

public class SpringStopWatchExample3 {

    public static void main (String[] args) throws InterruptedException {
        StopWatch sw = new StopWatch();
        sw.start("A");
        Thread.sleep(500);
        sw.stop();
        sw.start("B");
        Thread.sleep(300);
        sw.stop();
        sw.start("C");
        Thread.sleep(200);
        sw.stop();
        System.out.println(sw.prettyPrint());
    }
}

序列服务输出耗时信息

@Override
public long nextSeq(String name) {
    StopWatch watch = new StopWatch();
    watch.start("单序列获取总消耗");
    long sequence = generator.generateId(name);
    watch.stop();
    logger.info(watch.prettyPrint());
    return sequence;
}

getTotalTimeSeconds() 获取总耗时秒,同时也有获取毫秒的方法
prettyPrint() 优雅的格式打印结果,表格形式
shortSummary() 返回简短的总耗时描述
getTaskCount() 返回统计时间任务的数量
getLastTaskInfo().getTaskName() 返回最后一个任务TaskInfo对象的名称

到此这篇关于用StopWatch优雅替代currentTimeMillis计算程序执行耗时的文章就介绍到这了,更多相关Java StopWatch内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring StopWatch使用实例详解

    这篇文章主要介绍了Spring StopWatch使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 StopWatch简单的秒表,允许多个任务的计时,暴露每个命名任务的总运行时间和运行时间.隐藏使用System.currentTimeMillis(),提高应用程序代码的可读性并减少计算错误的可能性. 以下演示使用StopWatch记录请求摘要日志信息: @Slf4j public class PerformanceInteceptor

  • Java Stopwatch类,性能与时间计时器案例详解

    在研究性能的时候,完全可以使用Stopwatch计时器计算一项技术的效率.但是有时想知道某想技术的性能的时候,又常常想不起可以运用Stopwatch这个东西,太可悲了. 属性: Elapsed 获取当前实例测量得出的总运行时间. ElapsedMilliseconds  获取当前实例测量得出的总运行时间(以毫秒为单位). ElapsedTicks  获取当前实例测量得出的总运行时间(用计时器计时周期表示). IsRunning   获取一个指示 Stopwatch 计时器是否在运行的值. 方法

  • Java计时器StopWatch实现方法代码实例

    下面提供三种计时器的写法供大家参考,大家可以自行选择自己钟爱的使用. 写法一(Spring 包提供的计时器): import java.text.NumberFormat; import java.util.LinkedList; import java.util.List; /** * Simple stop watch, allowing for timing of a number of tasks, * exposing total running time and running ti

  • Spring计时器stopwatch使用详解

     StopWatch是位于org.springframework.util包下的一个工具类,通过它可方便的对程序部分代码进行计时(ms级别),适用于同步单线程代码块. 正常情况下,我们如果需要看某段代码的执行耗时,会通过如下的方式进行查看: public static void main(String[] args) throws InterruptedException { StopWatchTest.test0(); // StopWatchTest.test1(); } public st

  • Spring计时器StopWatch使用示例

    StopWatch是位于org.springframework.util包下的一个工具类,通过它可方便的对程序部分代码进行计时(ms级别),适用于同步单线程代码块. 正常情况下,我们如果需要看某段代码的执行耗时,会通过如下的方式进行查看: public static void main(String[] args) throws InterruptedException { StopWatchTest.test0(); // StopWatchTest.test1(); } public sta

  • 用StopWatch优雅替代currentTimeMillis计算程序执行耗时

    需求 有时需要记录程序执行时间,最简单就是打印当前时间与执行完时间的差值,缺点是: 执行大量测试的话就很麻烦 不直观 如果想对执行的时间做进一步控制,则需要在程序中很多地方修改 于是 Spring提供了一个StopWatch类可以做类似任务执行时间控制,即封装了一个对开始时间,结束时间记录工具 案例 统计输出总耗时 import org.springframework.util.StopWatch; public class SpringStopWatchExample { public sta

  • Spring Boot源码实现StopWatch优雅统计耗时

    目录 引言 StopWatch使用 使用Beyond compare比较 引言 昨天,一位球友问我能不能给他解释一下 @SpringBootApplication 注解是什么意思,还有 Spring Boot 的运行原理,于是我就带着他扒拉了一下这个注解的源码,还有 SpringApplication 类的 run() 方法的源码,一下子他就明白了. 你别说,看源码的过程还真的是挺有趣,这不,我就发现了一个有意思的点. public ConfigurableApplicationContext

  • C#计算程序执行过程花费时间的方法

    本文实例讲述了C#计算程序执行过程花费时间的方法.分享给大家供大家参考.具体如下: 计算执行完程序花费的时间: void AddInfo() { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); for (int i = 0; i < 1000; i++) { Console.WriteLine(i.ToString()); System.Threading.Thread.Sleep

  • 如何利用SystemTap统计函数执行耗时详解

    前言 当我们需要对应用程序进行系能分析时,我们通常可以使用perf或者火焰图. 但是这些工具通常只能定性问题,发现那些函数占用cpu较多,需要优化.但是给不出定量的数据, 比如这个函数的耗时情况,它耗时1ms还是5ms. 因此在不在代码中加入统计耗时的代码的情况,我们可以使用SystemTap来统计应用程序的耗时情况. SystemTap可以跟踪内核函数和用户态进程,当我们跟踪用户态进程时,需要使用其process模块. 查找函数符号 很多情况下,代码在执行时,其函数符号并不一定是代码中写的名称

  • PHP 计算代码执行耗时的代码修正网上普遍错误

    复制代码 代码如下: $t1 = explode(' ', microtime()); // ... 执行代码 ... $t2 = explode(' ', microtime()); echo ($t2[1]-$t1[1]).'s '.($t2[0]-$t1[0]).'ms'; 其实稍微试一下, 就能发现这份代码有个严重的问题. 虽然 t2 得到的时间肯定比 t1 大, 但不代表, 它的微秒数就一定比 t1 的微秒数大. 所以直接相减的话, ms 部分有可能得到的是负数. 因此, 我自己稍微改

  • Golang记录、计算函数执行耗时、运行时间的一个简单方法

    先写一个公共函数, 比如在 common 包下有这么一个方法: // 写超时警告日志 通用方法 func TimeoutWarning(tag, detailed string, start time.Time, timeLimit float64) { dis := time.Now().Sub(start).Seconds() if dis > timeLimit { log.Warning(log.CENTER_COMMON_WARNING, tag, " detailed:&quo

  • Java中该如何优雅的使用线程池详解

    目录 为什么要用线程池? 线程池 线程池基本概念 线程池接口定义和实现类 ExecutorService ScheduledExecutorService 线程池工具类 newFixedThreadPool(int nThreads) newCachedThreadPool() newSingleThreadExecutor() newScheduledThreadPool(int corePoolSize) 任务线程池执行过程 如何确认合适的线程数量? 线程池的使用分析 合理配置线程池大小 线

  • 让你的python代码更加pythonic(简练、明确、优雅)

    何为pythonic? pythonic如果翻译成中文的话就是很python.很+名词结构的用法在中国不少,比如:很娘,很国足,很CCTV等等. 我的理解为,很+名词表达了一种特殊和强调的意味.所以很python可以理解为:只有python能做到的,区别于其他语言的写法,其实就是python的惯用和特有写法. 置换两个变量的值. 很python的写法: 复制代码 代码如下: a,b = b,a 不python的写法: 复制代码 代码如下: temp = a a = b b = temp 上面的例

随机推荐