温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样获取ExecutorService执行结果

发布时间:2026-10-06 18:40:06 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Java 中,ExecutorService 本身只是线程池,真正获取“执行结果”通常有两种方式,取决于你提交的任务类型。


一、使用 submit() + Future 获取结果(最常用)

1️⃣ 提交 Callable(有返回值)

ExecutorService executor = Executors.newFixedThreadPool(2);

Callable<Integer> task = () -> {
    Thread.sleep(1000);
    return 1 + 1;
};

Future<Integer> future = executor.submit(task);

// 获取结果(会阻塞)
Integer result = future.get();
System.out.println(result); // 2

executor.shutdown();

✅ 特点:

  • Callable 有返回值
  • Future.get() 会阻塞线程直到任务完成
  • 可捕获异常(ExecutionException)

2️⃣ 提交 Runnable(无返回值,但可带结果)

ExecutorService executor = Executors.newSingleThreadExecutor();

Future<String> future =
        executor.submit(() -> {
            System.out.println("run");
        }, "done");

String result = future.get();
System.out.println(result); // done

二、批量任务:invokeAll() / invokeAny()

1️⃣ invokeAll(等待所有任务完成)

List<Callable<Integer>> tasks = List.of(
        () -> 1,
        () -> 2
);

List<Future<Integer>> futures = executor.invokeAll(tasks);

for (Future<Integer> f : futures) {
    System.out.println(f.get());
}

2️⃣ invokeAny(只要一个完成就返回)

Integer result = executor.invokeAny(tasks);
System.out.println(result);

✅ 适合“竞速”场景


三、使用 CompletableFuture(推荐,更现代)

ExecutorService executor = Executors.newFixedThreadPool(2);

CompletableFuture<Integer> future =
        CompletableFuture.supplyAsync(() -> 1 + 1, executor);

future.thenAccept(System.out::println);

✅ 优点:

  • 非阻塞
  • 支持链式调用
  • 更易处理异常和组合

四、获取异常信息

try {
    future.get();
} catch (ExecutionException e) {
    Throwable cause = e.getCause();
    cause.printStackTrace();
}

五、常见注意点 ⚠️

问题 说明
future.get() 阻塞 可用 get(timeout, unit)
不 shutdown() 线程池不会退出
异常被吞 Runnable 异常不会抛出

六、总结

场景 推荐方式
单任务有结果 submit(Callable)
多任务全部结果 invokeAll
异步非阻塞 CompletableFuture
只关心最快结果 invokeAny

如果你有具体业务场景(如超时控制、批量处理、Web 请求),我可以给你更合适的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手