Skip to content

CompletableFuture

Java 8 引入的异步编程工具,支持链式调用和组合操作。

1. 创建异步任务

java
// 无返回值
CompletableFuture<Void> f1 = CompletableFuture.runAsync(() -> {
    System.out.println("异步任务");
});

// 有返回值
CompletableFuture<String> f2 = CompletableFuture.supplyAsync(() -> "结果");

String result = f2.join();

2. 链式调用

java
CompletableFuture.supplyAsync(() -> "Hello")
    .thenApply(s -> s + " World")     // 转换结果
    .thenApply(String::toUpperCase)
    .thenAccept(System.out::println)  // 消费结果
    .thenRun(() -> System.out.println("完成"));
方法说明
thenApply转换结果
thenAccept消费结果
thenRun执行后续操作

3. 组合多个 Future

java
CompletableFuture<String> f1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> f2 = CompletableFuture.supplyAsync(() -> "World");

// 合并结果
CompletableFuture<String> combined = f1.thenCombine(f2, (s1, s2) -> s1 + " " + s2);

// 等待所有完成
CompletableFuture.allOf(f1, f2).join();

// 任一完成
CompletableFuture.anyOf(f1, f2).join();

4. 异常处理

java
CompletableFuture.supplyAsync(() -> {
    throw new RuntimeException("出错了");
})
.exceptionally(ex -> "默认值")
.handle((result, ex) -> {
    if (ex != null) return "异常处理";
    return result;
});

5. 最佳实践

java
// 使用自定义线程池
ExecutorService executor = Executors.newFixedThreadPool(10);
CompletableFuture.supplyAsync(() -> process(), executor);