• 20200110 org.springframework.util.StopWatch


    简介

    简单的秒表,允许为多个任务计时,公开总运行时间和每个命名任务的运行时间。
    隐藏System.nanoTime()的使用,从而提高了应用程序代码的可读性并减少了计算错误的可能性。

    请注意,此对象并非设计为线程安全的,并且不使用同步。
    此类通常用于在概念验证工作和开发过程中验证性能,而不是作为生产应用程序的一部分。

    从Spring Framework 5.2开始,以纳秒为单位跟踪和报告运行时间。

    使用

    • StopWatch:构造器,可指定StopWatch的id,默认为空字符串("")
    • getId:获取StopWatch的id,可通过构造函数指定,没有setter方法,默认为""
    • setKeepTaskList:设置keepTaskList属性,默认为true,如果设置为false,调用 getTaskInfo() 会报错,调用 prettyPrint() 时,打印内容格式为:
    StopWatch 'test': running time = 300520200 ns
    No task info kept
    
    • start:StopWatch 开始运行任务,可以通过入参指定 taskName,默认为空字符串("")

    • currentTaskName:返回当前运行任务的taskName,如果StopWatch当前不在运行中,返回null

    • isRunning:返回StopWatch是否仍在运行,在start()stop()之间调用为true,否则为false

    • stop:StopWatch 停止执行任务

    • getTaskInfo:以数组形式返回StopWatch的taskList,如果keepTaskList属性为false,抛出异常

    • getTaskCount:返回StopWatch的任务数量

    • getLastTaskInfo:返回上一个任务信息(TaskInfo对象),如果之前没有运行过任务,即没有调用过stop(),抛出异常

    • getLastTaskName:返回上一个任务的任务名称,即taskName

    • getLastTaskTimeNanos:返回上一个任务的运行时间,单位为ns

    • getLastTaskTimeMillis:返回上一个任务的运行时间,单位为ms

    • getTotalTimeNanos:返回StopWatch的总运行时间,单位为ns

    • getTotalTimeMillis:返回StopWatch的总运行时间,单位为ms

    • getTotalTimeSeconds:返回StopWatch的总运行时间,单位为s

    • prettyPrint:返回格式化后的StopWatch的所有任务的执行信息,格式为:

    StopWatch 'test': running time = 300009200 ns
    ---------------------------------------------
    ns         %     Task name
    ---------------------------------------------
    100146000  033%  task1
    199863200  067%  task2
    
    • shortSummary:返回StopWatch运行时间的简单描述
    • toString:返回StopWatch的所有任务的简单执行信息

    示例

    StopWatch sw = new StopWatch("test");
    System.out.println("id = " + sw.getId()); // id = test
    
    // sw.setKeepTaskList(false);
    
    sw.start("task1");
    {
        // do something
        System.out.println("currentTaskName = " + sw.currentTaskName()); // currentTaskName = task1
    }
    Thread.sleep(100);
    sw.stop();
    
    StopWatch.TaskInfo lastTaskInfo = sw.getLastTaskInfo();
    System.out.println("TimeSeconds = " + lastTaskInfo.getTimeSeconds()); // TimeSeconds = 0.1001189
    System.out.println("LastTaskName = " + sw.getLastTaskName()); // LastTaskName = task1
    System.out.println("LastTaskTimeMillis = " + sw.getLastTaskTimeMillis()); // LastTaskTimeMillis = 100
    System.out.println("LastTaskTimeNanos = " + sw.getLastTaskTimeNanos()); // LastTaskTimeNanos = 100118900
    
    sw.start("task2");
    {
        // do something
        System.out.println("currentTaskName = " + sw.currentTaskName()); // currentTaskName = task2
        System.out.println("isRunning = " + sw.isRunning()); // isRunning = true
    }
    Thread.sleep(200);
    sw.stop();
    
    System.out.println("currentTaskName = " + sw.currentTaskName()); // currentTaskName = null
    
    System.out.println(sw.prettyPrint());
    
    /*
    StopWatch 'test': running time = 300009200 ns
    ---------------------------------------------
    ns         %     Task name
    ---------------------------------------------
    100146000  033%  task1
    199863200  067%  task2
     */
    
    System.out.println("shortSummary = " + sw.shortSummary()); // StopWatch 'test': running time = 300458499 ns
    System.out.println("getTaskCount = " + sw.getTaskCount()); // 2
    System.out.println("getTotalTimeSeconds = " + sw.getTotalTimeSeconds() + " s"); // 0.301075301 s
    System.out.println("getTotalTimeMillis = " + sw.getTotalTimeMillis() + " ms"); // 300 ms
    System.out.println("getTotalTimeNanos = " + sw.getTotalTimeNanos() + " ns"); // 301075301 ns
    System.out.println("isRunning = " + sw.isRunning()); // false
    
    System.out.println(sw); // StopWatch 'test': running time = 300361899 ns; [task1] took 99972100 ns = 33%; [task2] took 200389799 ns = 67%
    
    
  • 相关阅读:
    原型与继承
    sqlserver优化管理
    vue 错误拦截
    axios 重新发起上次请求
    vue 滚动加载数据
    el-scrollbar组件
    ES服务器优化
    Aspose 生成pdf行距的不正确的问题,行距变高
    DocumentFormat.OpenXml.dll通過word做好的模板生成word
    stm32f103 rt-thread fal easyflash移植过程
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/12177597.html
Copyright © 2020-2023  润新知