使用System.currentTimeMillis()可获取任务执行毫秒数,即结束时间减开始时间;但其精度仅10–16毫秒,不适用于微秒级或高精度场景,应改用System.nanoTime()。

直接用 System.currentTimeMillis() 记录开始和结束时间,再相减就能得到任务执行的毫秒数。
获取开始和结束时间戳
调用两次 System.currentTimeMillis(),一次在任务前,一次在任务后:
- 开始时间 =
System.currentTimeMillis() - 执行任务(任意 Java 代码)
- 结束时间 =
System.currentTimeMillis() - 耗时(毫秒)= 结束时间 − 开始时间
注意精度和适用场景
currentTimeMillis() 返回的是自 1970-01-01 00:00:00 UTC 起的毫秒数,系统底层通常基于系统时钟,精度一般为 10–16 毫秒(取决于操作系统),不适合测量极短(如微秒级)或高精度任务。
如果需要更高精度,应改用 System.nanoTime(),它基于单调时钟,不受系统时间调整影响,且精度更高(通常达纳秒级,实际分辨率仍由硬件决定)。
立即学习“Java免费学习笔记(深入)”;
简单示例代码
Java
long start = System.currentTimeMillis();
// 模拟一段业务逻辑
Thread.sleep(123);
long end = System.currentTimeMillis();
<p>long durationMs = end - start;
System.out.println("耗时:" + durationMs + " 毫秒"); // 输出约 123–125 毫秒
常见误区提醒
- 不要用它做长时间跨度的“精确”计时(比如跨天、跨小时),因为系统时钟可能被手动或 NTP 同步调整,导致结果异常
- 避免在循环中高频调用——虽然开销极小,但无必要;单次起止记录足够
- 若任务可能抛异常,记得用
try-finally或 try-with-resources 确保结束时间总能被记录


















