1、前言
在 Java 程序开发的进程里,性能调优宛如一座高耸且亟待攀登的山峰,而获取程序运行时间则是攀爬途中不可或缺的关键工具。Java 以其卓越的跨平台性、强大的生态系统以及丰富的类库,被广泛应用于 Web 开发、企业级应用、移动后端乃至大型游戏服务端等多元领域。
每一个 Java 开发者都深知,代码的高效执行对于项目成败至关重要。获取运行时间能够为我们提供最直观的性能反馈,帮助我们精准定位代码中耗时较长的部分。当开发一款高并发的电商系统,面对海量订单处理时,通过测量运行时间,可排查出导致系统响应延迟的核心代码块,进而优化算法、调整资源分配,提升系统吞吐量。在大数据分析场景下,处理 TB 级数据的算法效率直接关乎分析结果的时效性,获取运行时间能够助力开发者从众多算法中筛选出最优解,大幅缩短数据处理周期。
下面,让我们深入探索 Java 中获取运行时间的方法,为提升代码性能筑牢根基。
2、方法
2.1 System.currentTimeMillis()
public void test25() {
long start = System.currentTimeMillis();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println(String.format("Sleep time: %d ms" , (end - start)));
}
2.2 System.nanoTime()
public void test24() {
long start = System.nanoTime();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
long end = System.nanoTime();
System.out.println(String.format("Sleep time: %d ms" , (end - start)/1000000));
}
2.3 StopWatch【spring】
public void test23() throws InterruptedException {
// 创建 StopWatch 实例
StopWatch stopWatch = new StopWatch("test23");
// 启动计时
stopWatch.start("Task 1");
// 模拟任务 1
Thread.sleep(1000);
stopWatch.stop();
// 启动计时
stopWatch.start("Task 2");
// 模拟任务 2
Thread.sleep(2000);
stopWatch.stop();
// 输出总耗时
System.out.println(stopWatch.prettyPrint());
System.out.println("Total time: " + stopWatch.getTotalTimeMillis() + " ms");
}
2.4 StopWatch【google】
依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
例子
public void test22() {
Stopwatch stopwatch = Stopwatch.createStarted();
// 模拟一些操作
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
stopwatch.stop();
System.out.println("Elapsed time: " + stopwatch.elapsed(java.util.concurrent.TimeUnit.MILLISECONDS) + " ms");
}