java如何计时
计时方法
System.currentTimeMillis()
获取当前时间的毫秒数,适用于简单计时场景。计算差值即可得到耗时:
long startTime = System.currentTimeMillis();
// 执行代码
long endTime = System.currentTimeMillis();
long duration = endTime - startTime; // 单位:毫秒
System.nanoTime()
提供纳秒级精度,适合高精度计时需求。注意此方法不保证与系统时间相关:
long startTime = System.nanoTime();
// 执行代码
long endTime = System.nanoTime();
long duration = (endTime - startTime) / 1_000_000; // 转换为毫秒
工具类实现
StopWatch(Spring框架)
Spring提供的计时工具类,支持多任务分段计时:
StopWatch stopWatch = new StopWatch();
stopWatch.start("task1");
// 执行任务1
stopWatch.stop();
stopWatch.start("task2");
// 执行任务2
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
自定义计时器
通过封装实现复用性更高的计时逻辑:
public class TimerUtil {
private long start;
public void start() {
this.start = System.currentTimeMillis();
}
public long stop() {
return System.currentTimeMillis() - start;
}
}
多线程计时
Future接口
结合线程池计算异步任务耗时:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future = executor.submit(() -> {
// 异步任务代码
});
long start = System.nanoTime();
future.get(); // 阻塞等待完成
long duration = (System.nanoTime() - start) / 1_000_000;
注意事项
- 避免在循环中频繁创建计时对象,优先复用实例
- 对于短时间测量(<1ms),推荐使用
nanoTime() - 多线程环境下确保计时逻辑的线程安全性







