当前位置:首页 > Java

java计时如何实现

2026-03-25 23:13:09Java

使用 System.currentTimeMillis()

在需要计时的代码段前后分别调用 System.currentTimeMillis() 获取当前时间戳,计算差值即为耗时。

long startTime = System.currentTimeMillis();
// 需要计时的代码
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
System.out.println("耗时:" + duration + "毫秒");

使用 System.nanoTime()

System.nanoTime() 提供更高精度的计时,适用于需要纳秒级精度的场景。

long startTime = System.nanoTime();
// 需要计时的代码
long endTime = System.nanoTime();
long duration = endTime - startTime;
System.out.println("耗时:" + duration + "纳秒");

使用 StopWatch 类(Spring 框架)

Spring 框架提供了 StopWatch 工具类,可以方便地进行分段计时。

java计时如何实现

StopWatch stopWatch = new StopWatch();
stopWatch.start("任务1");
// 任务1代码
stopWatch.stop();

stopWatch.start("任务2");
// 任务2代码
stopWatch.stop();

System.out.println(stopWatch.prettyPrint());

使用 Java 8 的 Instant 类

Java 8 引入了新的时间 API,可以使用 Instant 进行计时。

Instant start = Instant.now();
// 需要计时的代码
Instant end = Instant.now();
Duration duration = Duration.between(start, end);
System.out.println("耗时:" + duration.toMillis() + "毫秒");

使用 Timer 和 TimerTask

如果需要周期性执行任务并计时,可以使用 Timer 和 TimerTask。

java计时如何实现

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        System.out.println("定时任务执行时间:" + System.currentTimeMillis());
    }
}, 0, 1000); // 延迟0毫秒,每隔1000毫秒执行一次

使用 CompletableFuture 异步计时

对于异步任务,可以使用 CompletableFuture 结合计时功能。

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
    long start = System.currentTimeMillis();
    // 异步任务代码
    long duration = System.currentTimeMillis() - start;
    System.out.println("异步任务耗时:" + duration + "毫秒");
});

使用 JMH 进行基准测试

对于需要精确性能测试的场景,可以使用 JMH(Java Microbenchmark Harness)工具。

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Thread)
public class MyBenchmark {
    @Benchmark
    public void testMethod() {
        // 需要测试性能的代码
    }
}

每种方法适用于不同场景,System.currentTimeMillis() 和 System.nanoTime() 适合简单计时,StopWatch 适合多任务分段计时,Instant 适合 Java 8 时间 API 集成,Timer 适合周期性任务,CompletableFuture 适合异步任务,JMH 适合专业性能测试。

分享给朋友:

相关文章

vue中如何实现循环

vue中如何实现循环

循环渲染列表数据 在Vue中,使用v-for指令实现循环渲染。基本语法为v-for="(item, index) in items",其中items是数据源数组,item是当前遍历的元素,index是…

java如何下载

java如何下载

下载Java的步骤 访问Oracle官方网站或OpenJDK项目页面下载Java开发工具包(JDK)。Oracle JDK适用于商业用途,OpenJDK为开源版本。 打开浏览器,进入Oracle J…

java如何学习

java如何学习

学习Java的有效方法 理解基础概念 Java是一门面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制语句(if-else、循环)是必要的。面向对象的核心概念包括类、对象、继承、多态和封装…

vue如何实现重新实现主题

vue如何实现重新实现主题

Vue 主题切换的实现方法 使用 CSS 变量动态切换主题 定义主题相关的 CSS 变量,通过修改这些变量实现主题切换。在根元素(如 :root)中定义默认主题的变量,在特定类名下定义其他主题的变量。…

如何自学java

如何自学java

选择合适的学习资源 从官方文档开始,Oracle提供的Java官方教程(Java Tutorials)是权威且免费的学习资料。在线平台如Codecademy、Coursera或Udemy提供互动式课程…

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…