You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何并行执行方法内的指定代码片段

如何正确并行执行方法内部分代码并准确计时?

你当前的代码存在一个关键问题:调用pool.shutdown()后立即记录end时间,此时doSomethingOne、doSomethingTwo、doSomethingThree这三个任务大概率还在后台执行,所以最终的计时结果并不是这三个方法并行执行的实际耗时。

要实现「三个方法在start初始化后开始执行,全部完成后再初始化end」的需求,你需要等待所有提交的任务完成后再计算时间,以下是两种可行的实现方式:

方式一:使用awaitTermination等待任务完成

public static void someMethod() {
    // 三个任务只需3个线程,无需创建15个线程浪费资源
    final ExecutorService pool = Executors.newFixedThreadPool(3);

    long start = System.nanoTime();
    
    pool.execute(() -> doSomethingOne());
    pool.execute(() -> doSomethingTwo());
    pool.execute(() -> doSomethingThree());
    
    pool.shutdown(); // 停止接收新任务
    try {
        // 等待所有任务执行完成,设置1小时超时(可根据实际调整)
        if (!pool.awaitTermination(1, TimeUnit.HOURS)) {
            // 超时未完成则强制关闭线程池
            pool.shutdownNow();
        }
    } catch (InterruptedException e) {
        // 等待过程被中断时,强制关闭并恢复当前线程的中断状态
        pool.shutdownNow();
        Thread.currentThread().interrupt();
    }
    
    long end = System.nanoTime();
    System.out.println("并行执行耗时:" + (end - start) / 1_000_000_000L + "秒");
}

方式二:使用Future跟踪任务状态

public static void someMethod() {
    final ExecutorService pool = Executors.newFixedThreadPool(3);

    long start = System.nanoTime();
    
    // 提交任务并获取Future对象,用于跟踪任务执行状态
    Future<?> future1 = pool.submit(() -> doSomethingOne());
    Future<?> future2 = pool.submit(() -> doSomethingTwo());
    Future<?> future3 = pool.submit(() -> doSomethingThree());
    
    try {
        // 阻塞等待每个任务完成
        future1.get();
        future2.get();
        future3.get();
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    } finally {
        // 任务完成后关闭线程池
        pool.shutdown();
    }
    
    long end = System.nanoTime();
    System.out.println("并行执行耗时:" + (end - start) / 1_000_000_000L + "秒");
}

额外注意事项:

  • 修正原代码的语法错误:doSomethingOne需要改为doSomethingOne(),否则会编译失败。
  • 线程池大小建议匹配任务数量,避免不必要的线程上下文切换。

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:51:32