在 Java 中,CompletableFuture 是 Java 8 引入的用于异步编程和多线程任务编排的工具,比传统的 Thread / ExecutorService + Future 更灵活。
下面从基本用法 → 常用方法 → 实战示例逐步说明。
CompletableFuture.runAsync(() -> {
System.out.println("异步任务执行:" + Thread.currentThread().getName());
});
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
return "hello";
});
System.out.println(future.join()); // 阻塞获取结果
join()会阻塞当前线程
get()会抛受检异常
默认使用 ForkJoinPool.commonPool(),生产环境建议自定义:
ExecutorService executor = Executors.newFixedThreadPool(4);
CompletableFuture.supplyAsync(() -> "task", executor);
CompletableFuture<Integer> future =
CompletableFuture.supplyAsync(() -> 10)
.thenApply(x -> x + 5);
System.out.println(future.join()); // 15
CompletableFuture.supplyAsync(() -> "done")
.thenAccept(System.out::println);
CompletableFuture.supplyAsync(() -> 1)
.thenRun(() -> System.out.println("完成"));
.thenApplyAsync(x -> x * 2, executor);
CompletableFuture<Integer> f = CompletableFuture
.supplyAsync(() -> 10)
.thenCompose(x -> CompletableFuture.supplyAsync(() -> x * 2));
System.out.println(f.join()); // 20
CompletableFuture<Integer> f1 = CompletableFuture.supplyAsync(() -> 1);
CompletableFuture<Integer> f2 = CompletableFuture.supplyAsync(() -> 2);
CompletableFuture<Integer> result =
f1.thenCombine(f2, (a, b) -> a + b);
System.out.println(result.join()); // 3
CompletableFuture<Void> all = CompletableFuture.allOf(f1, f2);
all.join();
System.out.println("全部完成");
CompletableFuture<Object> any = CompletableFuture.anyOf(f1, f2);
CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("error");
}).exceptionally(ex -> {
System.out.println(ex.getMessage());
return "default";
});
.handle((res, ex) -> {
if (ex != null) return "fallback";
return res;
});
ExecutorService executor = Executors.newFixedThreadPool(4);
CompletableFuture<String> future =
CompletableFuture.supplyAsync(() -> "A", executor)
.thenApplyAsync(s -> s + "B", executor)
.thenApplyAsync(s -> s + "C", executor)
.exceptionally(ex -> "ERROR");
System.out.println(future.join());
✅ 使用自定义线程池
✅ 避免 join()/get() 滥用
✅ 复杂流程用 thenCompose / thenCombine
✅ 一定要处理异常
如果你有具体业务场景(比如:并发调用接口、批量处理、限流、超时控制),我可以直接给你对应代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。