详细分析Java中的StopWatch基本知识(附Demo)

目录

  • 前言
  • 1. 基本知识
  • 2. Demo

前言

对于Java的基本知识推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

1. 基本知识

StopWatch 是 Spring Framework 提供的一个简单计时器类,用来测量代码的执行时间

它可以用来跟踪某个任务或一系列任务的执行时间,常用于性能调优或监控任务的耗时

  1. 创建 StopWatch 对象:可以使用无参构造器或指定一个唯一标识符来创建一个 StopWatch 实例

  2. 开始计时:通过 start() 方法开始一个计时。可以给每个计时任务指定一个任务名,方便后续分析

  3. 停止计时:使用 stop() 方法停止当前任务的计时

  4. 获取任务耗时:通过 getTotalTimeMillis() 可以获取所有任务的总耗时,或者通过 getLastTaskTimeMillis() 获取上一个任务的耗时

  5. 任务信息:可以获取每个任务的耗时、百分比以及名称等详细信息

  6. 重置计时器:reset() 方法可以重置计时器,清除所有任务数据

基本的 API 使用方式
构造器

  • StopWatch():创建一个没有名称的计时器
  • StopWatch(String id):创建一个有指定唯一标识符 id 的计时器
方法功能
start()开始计时
start(String taskName开始一个命名任务的计时
stop()停止当前任务的计时
reset()重置计时器
getTotalTimeMillis()获取所有任务的总耗时(毫秒)
getLastTaskTimeMillis()获取最后一个任务的耗时(毫秒)
getTaskInfo()获取所有任务的详细信息
prettyPrint()格式化输出任务耗时信息,便于日志分析

2. Demo

import org.springframework.util.StopWatch;public class StopWatchDemo {public static void main(String[] args) throws InterruptedException {// 创建一个 StopWatch 实例StopWatch stopWatch = new StopWatch();// 开始第一个任务计时stopWatch.start("任务1");  // 启动名为 "任务1" 的计时Thread.sleep(500);  // 模拟任务执行,休眠500毫秒stopWatch.stop();  // 停止第一个任务计时// 开始第二个任务计时stopWatch.start("任务2");  // 启动名为 "任务2" 的计时Thread.sleep(300);  // 模拟任务执行,休眠300毫秒stopWatch.stop();  // 停止第二个任务计时// 输出所有任务的详细信息,格式化展示System.out.println(stopWatch.prettyPrint());// 获取所有任务的总耗时System.out.println("总耗时: " + stopWatch.getTotalTimeMillis() + " ms");}
}

截图如下:

在这里插入图片描述

import org.springframework.util.StopWatch;public class MultipleTaskDemo {public static void main(String[] args) throws InterruptedException {// 创建一个带有ID的StopWatch实例StopWatch stopWatch = new StopWatch("MyStopWatch");// 开始第一个任务stopWatch.start("任务 A");Thread.sleep(200); // 模拟任务 A 执行stopWatch.stop();  // 停止计时// 开始第二个任务stopWatch.start("任务 B");Thread.sleep(400); // 模拟任务 B 执行stopWatch.stop();  // 停止计时// 开始第三个任务stopWatch.start("任务 C");Thread.sleep(600); // 模拟任务 C 执行stopWatch.stop();  // 停止计时// 输出 StopWatch 的 ID 和所有任务信息System.out.println("StopWatch ID: " + stopWatch.getId());System.out.println(stopWatch.prettyPrint());// 遍历每个任务的信息for (StopWatch.TaskInfo taskInfo : stopWatch.getTaskInfo()) {System.out.println("任务名称: " + taskInfo.getTaskName());System.out.println("任务耗时: " + taskInfo.getTimeMillis() + " ms");}// 输出总耗时System.out.println("总耗时: " + stopWatch.getTotalTimeMillis() + " ms");}
}

截图如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550996.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【TabBar嵌套Navigation案例-新特性页面-背景图片 Objective-C语言】

一、接下来,我们来做这个背景图片的这个功能啊 1.首先呢,我们command + R跑一下,现在都是有一堆颜色, 大体的这个框架啊,我们都已经搭好了, 接下来,我们把这几个颜色啊,CollectionView的背景图片,给它设置一下, 首先呢,这个设置啊,我们这么着来做,我们呢,肯定…

解决:使用layui.treeTable.updateNode,更新表格数据后,done里面的事件丢失问题

1. 背景 在给树形表格添加行点击事件,并且只更新当前行数据。 treeTable.updateNode("SpeProjListId", result.LAY_DATA_INDEX, result);更新数据后,点击事件失效。 1. 给字段绑定事件: class"link_a link_style" , {…

草莓病虫害数据集1000张分5类 草莓植株黑斑病、草莓灰霉菌病、正常草莓、草莓粉霉菌病、草莓橡胶病

草莓病虫害数据集 1000张 分5类 草莓植株黑斑病、草莓灰霉菌病、正常草莓、草莓粉霉菌病、草莓橡胶病 草莓病虫害数据集介绍 名称 草莓病虫害数据集 规模 图像数量:1000张高质量图像类别数量:5类 草莓植株黑斑病 (Black Spot Disease)草莓灰霉菌病 (…

【Python】Curdling:Python 包管理的高效工具

Curdling 是一个轻量级的 Python 包管理工具,旨在加速 Python 包的安装和管理流程。与传统的包管理工具(如 pip)相比,Curdling 更加注重性能优化和效率,特别是在处理大规模依赖项和项目构建时表现优异。它通过并行化的…

360° 镜头检测铝件内壁划痕与杂质:保障铝件内孔制造质量的精准方案

在铝件内孔制造的过程中,内壁的质量把控是至关重要的环节。制造过程中产生的碎屑残留以及划痕等问题,不仅会影响铝件的外观,更可能对其性能和使用寿命造成严重的损害。为了精准检测这些问题,我们提出了一套基于 360 镜头的检测方案…

3. 将GitHub上的开源项目导入(clone)到本地pycharm上——深度学习·科研实践·从0到1

目录 1. 在github上搜项目 (以OpenOcc为例) 2. 转移到码云Gitee上 3. 下载整个项目到本地 4. 在pycharm中打开项目 1. 在github上搜项目 (以OpenOcc为例) 把链接复制下来,转移到国内Gitee上,会更稳定 2. 转移到码云Gitee上 &…

深度学习-11

线性层及其它层介绍 归一化层 在深度学习中,归一化层(Normalization Layers)是神经网络中非常重要的一部分,它们有助于在训练过程中稳定网络,加速收敛,以及提高模型的泛化能力。以下是PyTorch框架中一些常…

6.1 微服务 服务发现 架构模式分类 应用实践

微服务 服务发现 架构模式分类 应用实践 目录概述需求: 设计思路实现思路分析1.类型-客户端发现2.类型-服务端服务发现3.工具-Eureka4.工具-Consul5.工具-zookper服务发现的挑战服务发现的最佳实践 参考资料和推荐阅读 Survive by day and develop by night. talk …

谷歌Gemini 1.5 AI模型升级:成本更低、性能更强、响应更快

AITOP100获悉,9月24日,谷歌谷歌Gemini 1.5 AI模型升级:成本更低、性能更强、响应更快对其旗下Gemini 1.5 AI模型进行了升级,推出了Gemini-1.5-Pro-002和Gemini-1.5-Flash-002两款新模型。这两款模型在成本、性能和响应速度方面均有…

在线PDF怎么转换成JPG图片?分享14种转换操作!

作为一名社畜,俺也经常要将PDF转换为图片格式! 如何进行快速转换,包括电脑端、在线端和手机端,今天俺就测评了50款工具,给你得出了下面这些渠道,不少也是免费的,相信对你有帮助哦! …

Spring - @Import注解

文章目录 基本用法源码分析ConfigurationClassPostProcessorConfigurationClass SourceClassgetImportsprocessImports处理 ImportSelectorImportSelector 接口DeferredImportSelector 处理 ImportBeanDefinitionRegistrarImportBeanDefinitionRegistrar 接口 处理Configuratio…

2-3树(2-3 Tree):原理、常见算法及其应用

目录 引言 2-3树的基本概念 常见算法 查找节点 插入节点 删除节点 2-3树的应用场景 1. 文件系统目录管理 应用原理 场景描述 2. 字典编码 应用原理 场景描述 总结 优势对比 自平衡特性 灵活的节点结构 高效的操作性能 简单的实现 广泛的应用场景 数据一致…

遥感图像分割

遥感图像分割是一种应用于遥感图像的计算机视觉技术,用于将图像划分为不同的区域,每个区域代表地表的不同特征,如水体、森林、城市区域等。这种分割帮助我们更好地理解和分析地球表面的变化,对于环境监测、城市规划、农业、灾害管…

AR技术在电商行业的应用及优势有哪些?

AR(增强现实)技术在电商行业的应用广泛且深入,为消费者带来了全新的购物体验,同时也为商家带来了诸多优势。以下是AR技术在电商行业的主要应用场景及其优势: 一、应用场景 1、虚拟商品展示与试用 家具AR摆放&#x…

济南站活动回顾|IvorySQL中的Oracle XML函数使用示例及技术实现原理

近日,由中国开源软件推进联盟PG分会 & 齐鲁软件园联合发起的“PostgreSQL技术峰会济南站”在齐鲁开源社举办。瀚高股份IvorySQL作为合作伙伴受邀参加此次活动。 瀚高股份IvorySQL技术工程师 向逍 带来「IvorySQL中的Oracle XML函数兼容」的议题分享。在演讲中&a…

前端vue-form表单的验证

form表单验证的完整步骤

二叉树的中序遍历(java)

概述 关于二叉树,我们都不陌生,许多基于递归的问题发起点都是一个二叉树的root节点。对于各种二叉树的问题,我们也是通过dfs进行求解。例如求二叉树的深度、最近公共祖先等 算法分析 关于二叉树的中序遍历,我们都知道应该先访…

【C++单调队列】1438. 绝对差不超过限制的最长连续子数组|1672

本文时间知识点 C队列、双向队列 LeetCode1438. 绝对差不超过限制的最长连续子数组 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。 如…

Flume实战--Flume中的选择器、自动容灾(故障转移)、负载均衡的详解与操作

本文详细介绍了Apache Flume的关键特性,包括选择器、拦截器、故障转移和负载均衡。选择器负责将数据分发到多个Channel,拦截器用于修改或丢弃Event。故障转移机制能够在Sink故障时自动切换,而负载均衡则在多个Sink间分配负载。文章还提供了自…

CANoe_DBC能够打开但是无法使用“BusType”

解决DBC文件在CAPL中调用问题:从CANdb到CAPL的顺畅过渡 在汽车电子和嵌入式系统开发中,DBC(Database CAN)文件作为描述CAN(Controller Area Network)通信协议的重要工具,广泛应用于网络设计、测…