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);