CompletableFuture按照调用顺序,返回结果,给出实例
时间: 2024-06-19 13:01:30 浏览: 101
`CompletableFuture` 是Java 8中引入的一个强大的并发工具类,它用于处理异步计算的结果,并提供了线程安全和顺序控制的能力。在Java中,`CompletableFuture` 的行为可以分为三种主要类型:`thenApply()`, `thenCompose()`, 和 `thenAccept()`,它们可以按照调用顺序依次执行。
1. **thenApply()**:当前Future完成时,应用给定的函数到其结果,然后返回一个新的Future。这会按照调用顺序执行,后一个方法依赖于前一个方法的结果。
```java
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> future2 = future1.thenApply(result -> result + " World");
```
在这个例子中,首先异步创建了一个字符串"Hello",然后将它追加" World"。
2. **thenCompose()**:类似 `thenApply()`,但接受一个函数,该函数返回另一个CompletableFuture。这个函数会在前一个Future完成并获取结果后被调用。
```java
CompletableFuture<String> future3 = future2.thenCompose(str -> CompletableFuture.completedFuture(str.toUpperCase()));
```
这里,将"Hello World"转换为大写。
3. **thenAccept()**:不返回新的Future,而是接受一个Consumer函数,用于处理结果。
```java
future2.thenAccept(System.out::println); // 输出 "Hello World"
```
这将在前面的操作完成后打印结果。
**返回结果顺序**:这些方法的调用顺序决定了结果的消费顺序,即后一个`then*()`方法将在前一个完成并返回结果后执行。如果某个操作抛出异常,后续的`then*()`不会被执行,直到异常被捕获或回滚。
**相关问题--:**
1. `CompletableFuture`主要用于处理什么场景?
2. 与`Future`相比,`CompletableFuture`的优势是什么?
3. 如何处理`CompletableFuture`中的异常?
阅读全文