java CompletableFuture代码示例
时间: 2024-09-20 21:08:30 浏览: 40
在Java中,`CompletableFuture`是Java 8引入的一个强大的工具,用于处理异步操作。它提供了一个线程安全的方式来协调任务的执行,包括并行、串行化、错误处理以及最终值的合并。以下是一些基本的`CompletableFuture`代码示例:
1. **基础使用:**创建并获取结果
```java
CompletableFuture.supplyAsync(() -> {
Thread.sleep(2000); // 模拟耗时操作
return "Hello from a background thread";
}).thenApply(result -> {
System.out.println("Future completed with result: " + result);
return result.toUpperCase();
}).get(); // 等待任务完成
```
2. **链式调用:**多个步骤的异步操作
```java
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
return new String("Task A");
})
.thenApply(s -> s + ", Task B")
.thenApply(s -> s + ", Task C");
future.whenComplete((value, error) -> {
if (error == null) {
System.out.println("Final result: " + value);
} else {
System.out.println("An exception occurred: " + error.getMessage());
}
});
```
3. **并发处理:**并行执行多个任务
```java
List<Callable<String>> tasks = Arrays.asList(
() -> "Task 1",
() -> "Task 2"
);
CompletableFuture.allOf(tasks.stream()
.map(Callable::call)
.collect(Collectors.toList())
.stream()
.map(CompletableFuture::supplyAsync)
).join(); // 等待所有任务完成
```
4. **错误处理:**使用`exceptionally`方法处理异常
```java
CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("Failed task");
})
.exceptionally(t -> {
System.err.println("Error handling: " + t.getMessage());
return "Handling failed task";
})
.thenApply(result -> "Completed with error handling");
```
阅读全文