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

如何从ExecutorService中获取指定时间点前已完成任务的结果

Java线程池获取已完成任务结果实现方案

核心实现逻辑

  • 提交任务时,将ExecutorService.submit()返回的Future<Integer>对象统一存入列表,用于后续状态判断和结果读取
  • 主线程完成其他耗时操作后,遍历存储的Future列表,调用isDone()方法判断任务是否已结束(该方法对正常完成、执行异常、被取消的任务均会返回true)
  • 仅对已完成的任务调用get()获取返回值,存入结果列表,未完成的任务直接跳过
  • 最终调用shutdownNow()终止所有未执行完成的线程

完整代码示例

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Main {
    public static void main(String[] args) {
        ExecutorService service = Executors.newFixedThreadPool(16);
        // 存储所有任务返回的Future对象
        List<Future<Integer>> futureList = new ArrayList<>();
        // 你的任务类需实现Callable<Integer>接口,返回值为Integer类型,此处为模拟任务实现
        Callable<Integer> threadClass = () -> {
            // 模拟5秒耗时任务
            Thread.sleep(5000);
            return 1;
        };

        for(int i = 0 ; i < 100 ; i++) {
            Future<Integer> future = service.submit(threadClass);
            futureList.add(future);
        }
        
        // 主线程在此处执行其他耗时操作,此处仅作模拟
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 收集已完成任务的结果
        List<Integer> resultList = new ArrayList<>();
        for (Future<Integer> future : futureList) {
            // 仅处理已完成的任务
            if (future.isDone()) {
                try {
                    resultList.add(future.get());
                } catch (Exception e) {
                    // 捕获任务执行异常、中断异常等,可根据业务需求调整处理逻辑
                    e.printStackTrace();
                }
            }
        }
        
        // 可自行验证结果
        System.out.println("已完成任务数量:" + resultList.size());

        service.shutdownNow(); // 终止其余所有线程
    }
}

注意事项

  • 若任务提交的是Runnable类型无返回值的实现,需要调整Future的泛型参数,或在提交时指定返回值
  • 若不需要处理任务执行异常的场景,可简化异常捕获逻辑
  • shutdownNow()会尝试终止所有正在执行的任务,停止处理等待队列中的任务,并返回等待执行的任务列表,可根据需求接收返回值做后续处理

内容的提问来源于stack exchange,提问作者Vedant Mehra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:08