【第22章】spring-计时器

2024-04-27 04:12
文章标签 22 spring 计时器 java

本文主要是介绍【第22章】spring-计时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、java计时
    • 1. 计时代码
    • 2. 执行结果
  • 二、spring计时
    • 1.计时代码
    • 2.执行结果
  • 总结


前言

功能优化的重点是需要缩短业务中比较耗时的模块的处理时间,首先我们需要分析出各个模块的耗时时间,接下来才能有针对的去做优化。

Spring 框架提供了一个 StopWatch 类,它用于在开发过程中测量代码执行时间。通过 StopWatch,你可以方便地记录多个任务(或代码块)的执行时间,并可以对这些时间进行统计和分析。


一、java计时

1. 计时代码

package org.example.timer;/*** Create by zjg on 2024/4/21*/
public class Timer {public static void main(String[] args) {system();}public static void system() {long task1Start = System.currentTimeMillis();// 开始一个任务System.out.println("task1执行");// 模拟任务执行try {Thread.sleep(500); // 休眠0.5秒} catch (InterruptedException e) {e.printStackTrace();}// 结束任务,并自动记录执行时间System.out.println("task1结束");long task1End = System.currentTimeMillis();// 开始另一个任务System.out.println("task2执行");long task2Start = System.currentTimeMillis();// 模拟任务执行try {Thread.sleep(1000); // 休眠1秒} catch (InterruptedException e) {e.printStackTrace();}// 结束任务,并自动记录执行时间System.out.println("task2结束");long task2End = System.currentTimeMillis();// 打印所有任务的执行时间long timer1 = task1End - task1Start;long timer2 = task2End - task2Start;System.out.println(String.format("任务1耗时:[%s]秒",timer1/1000));System.out.println(String.format("任务1耗时:[%s]毫秒",timer1));System.out.println(String.format("任务1耗时:[%s]秒",timer2/1000));System.out.println(String.format("任务2耗时:[%s]毫秒",timer2));}
}

2. 执行结果

task1执行
task1结束
task2执行
task2结束
任务1耗时:[0]秒
任务1耗时:[506]毫秒
任务1耗时:[1]秒
任务2耗时:[1007]毫秒

可以看出,计时时间单位是毫米,秒是通过运算得来的,不足1秒的值就是0秒,不够精确。

二、spring计时

1.计时代码

package org.example.timer;import org.springframework.util.StopWatch;
import java.util.Arrays;/*** Create by zjg on 2024/4/21*/
public class Timer {public static void main(String[] args) {stopWatch();}public static void stopWatch() {StopWatch stopWatch = new StopWatch();// 开始一个任务System.out.println("task1执行");stopWatch.start("task1");// 模拟任务执行try {Thread.sleep(500); // 休眠0.5秒} catch (InterruptedException e) {e.printStackTrace();}// 结束任务,并自动记录执行时间System.out.println("task1结束");stopWatch.stop();// 开始另一个任务System.out.println("task2执行");stopWatch.start("task2");// 模拟任务执行try {Thread.sleep(1000); // 休眠1秒} catch (InterruptedException e) {e.printStackTrace();}// 结束任务,并自动记录执行时间System.out.println("task2结束");stopWatch.stop();StopWatch.TaskInfo[] taskInfo = stopWatch.getTaskInfo();Arrays.stream(taskInfo).toList().forEach((taskInfo1 -> {System.out.println(String.format("任务[%s],耗时[%s]秒",taskInfo1.getTaskName(),taskInfo1.getTimeSeconds()));System.out.println(String.format("任务[%s],耗时[%s]毫秒",taskInfo1.getTaskName(),taskInfo1.getTimeMillis()));System.out.println(String.format("任务[%s],耗时[%s]纳秒",taskInfo1.getTaskName(),taskInfo1.getTimeNanos()));}));// 打印所有任务的执行时间System.out.println(stopWatch.prettyPrint());}
}

2.执行结果

task1执行
task1结束
task2执行
task2结束
任务[task1],耗时[0.5026385]秒
任务[task1],耗时[502]毫秒
任务[task1],耗时[502638500]纳秒
任务[task2],耗时[1.0009278]秒
任务[task2],耗时[1000]毫秒
任务[task2],耗时[1000927800]纳秒
StopWatch '': running time = 1503566300 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
502638500  033%  task1
1000927800  067%  task2

spring计时器为我们提供了秒、毫秒、纳秒三种时间单位,并帮我们列出了多个任务的耗时百分比情况,相对较友好。


总结

回到顶部

计时任务其实是个切面问题,我们需要分析、跟踪系统中大量接口的交易时间、平均时间、超时时间等等。

这篇关于【第22章】spring-计时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939486

相关文章

4) Spring Boot + Spring Security集成CAS

4) Spring Boot + Spring Security集成CAS 预期效果: 访问客户端时跳转到cas登录登录完后,展示默认的用户信息对cas用户进行用户映射 分支代码:https://github.com/grissomsh/cas/tree/1.x-integration-spring-boot cas校验流程: 用户访问业务系统(client)无权限时跳转到cas(服

Spring Security会话控制(单用户登录)

在项目开发过程中很难避免说单用户登录系统,或者说对登录会话进行限制,例如说,只能两台机器登录用户 那么话不多说,直接看配置代码: XML配置 如果你想限制单个用户访问你的应用程序的能力。Spring Security通过后面简单的配置马上启用。首先你需要添加后面的监听器到你的web.xml文件。让Spring Security获得session的生存事件: <listener><li

Hadoop Java API操作 及读取序列化文件(04-05-06)

针对于04-05-06班级整合。 1.创建java项目 2.修改pom.xml文件 添加依赖 <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.4</version></dependency><depen

Springboot jar包部署后不能读取resources目录下的Excel文件

最近做线下数据补录到线上,因为关联了5个数据表,所以没法写SQL执行。 在本地测试的时候,使用如下读文件的方式是正常的: String fileName = "xxxFile.xlsx";String filePath = this.getClass().getClassLoader().getResource(fileName).getPath();InputStream stream =

Java | 增强for底层工作机制

✍🏼作者:周棋洛,bilidown开发者。 ♉星座:金牛座 🏠主页:我的个人网站 🌐关键:Java 增强for 工作机制 目录 引言增强for循环语法增强for工作机制探究简单总结1.对于实现了Iterable接口的集合2.对于数组个人理解 彩蛋:forEach方法 引言 Java中的增强for循环(也称为for-each循环)是对集合(如数组,Iterabl

JAVA定时创建mysql表

Java代码实现 @Value("${timeTask.scheduled}")private boolean scheduled;// 提前创建3天的表@Scheduled(cron = "0 0 1 * * ?")public void createTable() {if (scheduled) {log.info("开始检验日志表");LocalDate localDate = Loca

java中if-else的代替写法是什么?

在Java中,有一种常见的if-else的替代写法是使用三元运算符(Ternary Operator)或者switch语句。下面是这两种替代写法的示例: 三元运算符:result = (condition) ? value1 : value2;这表示如果条件(condition)为真,则将value1赋值给result,否则将value2赋值给result。例如: int num = 10;St

Spring初学入门(跟学笔记)

一、Spring概述 Spring是一款主流的Java EE轻量级开源框架。 Spring的核心模块:IoC(控制反转,指把创建对象过程交给Spring管理 )、AOP(面向切面编程,在不修改源代码的基础上增强代码功能) 二、Spring入门 2.1 入门案例开发步骤 引入spring相关依赖创建类,定义属性和方法按照spring要求创建配置文件在spring配置文件中配置相关信息进行测试

【全开源】JAVA语聊大厅语音聊天APP系统源码

语聊大厅语音聊天源码:打造专属的语音社交平台 核心功能 多人语音聊天:支持多人同时在线语音聊天,用户可以创建或加入不同的聊天室,与好友或陌生人进行实时互动。语音转文字:提供语音转文字功能,方便用户在聊天过程中查看聊天记录或进行文字回复。用户认证与权限管理:支持用户注册、登录、密码找回等基本功能,同时提供用户权限管理,确保平台的安全性。消息推送与通知:支持实时消息推送和通知功能,让用户能够及时了

Java各大GPS坐标系互转算法(保证好用)

不好用来捶我,好用的话点个赞鼓励一下~ /*** 坐标转换器*/public class CoordinateConverter {private static final double x_PI = 3.14159265358979324 * 3000.0 / 180.0;private static final double PI = 3.1415926535897932384626;pr