Apache StopWatch是Apache Commons库中的一个组件,它提供了简单而强大的计时器功能。StopWatch可以帮助开发人员精确地计时方法或代码块的执行时间,以便进行性能分析和优化。它提供了计时、暂停、继续、重置等功能,使我们能够更好地监控和控制代码的执行时间。
在这给家人们准备了一些java书籍
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
package cn.xj.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.StopWatch;
import java.util.concurrent.TimeUnit;
@Slf4j
public class Test {
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Thread.sleep(3000);
stopWatch.stop();
log.info("方法执行时间:{}毫秒",stopWatch.getTime());
log.info("方法执行时间:{}秒",stopWatch.getTime(TimeUnit.SECONDS));
}
}
输出
已连接到目标 VM, 地址: ''127.0.0.1:52888',传输: '套接字''
21:03:47.430 [main] INFO cn.xj.common.utils.Test - 方法执行时间:3011毫秒
21:03:47.433 [main] INFO cn.xj.common.utils.Test - 方法执行时间:3秒
与目标 VM 断开连接, 地址为: ''127.0.0.1:52888',传输: '套接字''
进程已结束,退出代码0
package cn.xj.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.StopWatch;
import java.util.concurrent.TimeUnit;
@Slf4j
public class Test {
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
// 执行业务逻辑,一顿执行猛如虎,一看代码睡3秒
Thread.sleep(3000);
stopWatch.suspend(); // 暂停计时器
// 执行其他操作,暂停期间不计入计时
Thread.sleep(2000);
stopWatch.resume(); // 恢复计时器
// 继续执行操作,让我再睡1秒
Thread.sleep(1000);
stopWatch.stop();
log.info("方法执行时间:{}毫秒",stopWatch.getTime());
log.info("方法执行时间:{}秒",stopWatch.getTime(TimeUnit.SECONDS));
}
}
输出
已连接到目标 VM, 地址: ''127.0.0.1:53100',传输: '套接字''
21:15:38.963 [main] INFO cn.xj.common.utils.Test - 方法执行时间:4017毫秒
21:15:38.967 [main] INFO cn.xj.common.utils.Test - 方法执行时间:4秒
与目标 VM 断开连接, 地址为: ''127.0.0.1:53100',传输: '套接字''
进程已结束,退出代码0
package cn.xj.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.StopWatch;
@Slf4j
public class Test {
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
// 第一段业务逻辑,一顿执行猛如虎,一看代码睡3秒
Thread.sleep(3000);
stopWatch.split();
log.info("第一段耗时:{}毫秒",stopWatch.getSplitTime());
// 第二段业务逻辑,再睡2秒
Thread.sleep(2000);
stopWatch.split();
log.info("第二段耗时:{}毫秒",stopWatch.getSplitTime());
// 第三段业务逻辑,这次睡4秒
Thread.sleep(4000);
stopWatch.stop();
log.info("总耗时:{}毫秒",stopWatch.getTime());
}
}
输出
已连接到目标 VM, 地址: ''127.0.0.1:58391',传输: '套接字''
21:37:15.972 [main] INFO cn.xj.common.utils.Test - 第一段耗时:3014毫秒
21:37:17.988 [main] INFO cn.xj.common.utils.Test - 第二段耗时:5031毫秒
21:37:22.002 [main] INFO cn.xj.common.utils.Test - 总耗时:9046毫秒
与目标 VM 断开连接, 地址为: ''127.0.0.1:58391',传输: '套接字''
进程已结束,退出代码0
package cn.xj.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.StopWatch;
import java.util.concurrent.TimeUnit;
@Slf4j
public class Test {
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
// 执行业务逻辑1,一顿执行猛如虎,一看代码睡3秒
Thread.sleep(3000);
stopWatch.stop();
log.info("方法1执行时间:{}毫秒",stopWatch.getTime());
log.info("方法1执行时间:{}秒",stopWatch.getTime(TimeUnit.SECONDS));
stopWatch.reset(); // 重置计时器
stopWatch.start();
// 执行其他业务逻辑2,扶我躺下,我还能睡2秒
Thread.sleep(2000);
stopWatch.stop();
log.info("方法2执行时间:{}毫秒",stopWatch.getTime());
log.info("方法2执行时间:{}秒",stopWatch.getTime(TimeUnit.SECONDS));
}
}
输出
已连接到目标 VM, 地址: ''127.0.0.1:58622',传输: '套接字''
21:48:25.252 [main] INFO cn.xj.common.utils.Test - 方法1执行时间:3005毫秒
21:48:25.255 [main] INFO cn.xj.common.utils.Test - 方法1执行时间:3秒
21:48:27.263 [main] INFO cn.xj.common.utils.Test - 方法2执行时间:2007毫秒
21:48:27.263 [main] INFO cn.xj.common.utils.Test - 方法2执行时间:2秒
与目标 VM 断开连接, 地址为: ''127.0.0.1:58622',传输: '套接字''
进程已结束,退出代码0