system.currenttimemillis()通过获取两次系统时间戳并求差来粗略测量程序运行时间,单位毫秒,适合接口响应监控、批量处理调试等低精度场景,但受系统时钟精度(通常10–15ms)和调整影响,不适用于微基准测试。

用 System.currentTimeMillis() 计算程序运行时间,本质是取两次系统当前时间(毫秒级)的差值。它简单、轻量,适合粗略测量,但要注意精度和适用场景。
基本用法:前后取差
在代码执行前获取一次时间戳,执行后再次获取,相减即为耗时(单位:毫秒):
- long start = System.currentTimeMillis();
- // 你的业务逻辑(比如循环、IO、计算等)
- long end = System.currentTimeMillis();
- long cost = end - start; // 耗时,单位毫秒
注意精度和局限性
currentTimeMillis() 依赖操作系统底层时钟,通常精度在 10–15 毫秒(Windows 常见),Linux 可能稍高。这意味着:
- 测量小于 10ms 的操作(如单次方法调用、简单计算)结果可能恒为 0 或波动很大
- 不适合微基准测试(micro-benchmark),应改用
System.nanoTime() - 受系统时钟调整影响(如 NTP 同步、手动改时间),可能导致负值或异常跳变
适合什么场景?
该方式适用于对精度要求不高的日常开发场景:
- 监控接口整体响应时间(如 Spring MVC 中记录请求耗时)
- 调试时快速验证某段批量处理(如读取万行文件、插入千条数据库记录)是否明显变慢
- 日志中打点记录“开始/结束”时间,辅助问题排查
一个实用小技巧:避免隐式装箱和格式干扰
直接打印或记录时,别写成 System.out.println("耗时:" + (end - start) + "ms") 这种拼接——虽然没错,但若想复用或统计,建议封装为方法:
- public static long time(Runnable task) {
- long s = System.currentTimeMillis();
- task.run();
- return System.currentTimeMillis() - s;
- }
- 调用:long ms = time(() -> doSomething());
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











