CompletableFuture 使用案例
时间: 2024-06-12 22:02:36 浏览: 73
CompletableFutureExamples:使用Java的CompletableFuture进行异步编程的示例
`CompletableFuture`是Java 8中引入的一个强大的异步编程工具,它提供了非阻塞的、线程安全的和可组合的未来(future)对象,用于处理并发任务的结果。它主要用在需要异步计算并且需要处理计算结果的地方,如网络请求、数据库操作或复杂的任务序列。
一个典型的使用案例可能是从多个源获取数据并合并结果:
```java
import java.util.concurrent.CompletableFuture;
public class CompletableFutureExample {
public static void main(String[] args) {
CompletableFuture<String> future1 = fetchFromAPI("url1");
CompletableFuture<String> future2 = fetchFromAPI("url2");
CompletableFuture<String> future3 = fetchFromDatabase("query1");
// 将这些future组合成一个新的future,当所有原future都完成时,结果才会完成
CompletableFuture<String[]> combinedFuture = CompletableFuture.allOf(future1, future2, future3)
.thenApply(Arrays::asList);
// 当所有数据都获取到后,调用thenApply处理结果
combinedFuture.thenAccept(data -> processCombinedData(data));
}
private static CompletableFuture<String> fetchFromAPI(String url) {
// 这里模拟异步网络请求
return CompletableFuture.supplyAsync(() -> {
try {
return new String(URI.create(url).readBytes());
} catch (Exception e) {
throw new RuntimeException("Error fetching from API", e);
}
});
}
private static CompletableFuture<String> fetchFromDatabase(String query) {
// 这里同样模拟异步数据库查询
return CompletableFuture.supplyAsync(() -> {
// 假设数据库操作已封装为返回String的函数
return DatabaseUtils.query(query);
});
}
private static void processCombinedData(String[] data) {
// 数据处理逻辑
System.out.println("Processed data: " + Arrays.toString(data));
}
}
```
阅读全文