CompletableFuture具体用法
时间: 2023-11-14 10:09:35 浏览: 56
CompletableFuture是Java8引入的一个异步编程工具,它可以让我们更方便地进行异步编程。它的主要特点是可以将异步操作串联起来,形成一个异步操作链,从而避免了回调地狱的问题。下面是一个简单的例子:
```java
CompletableFuture.supplyAsync(() -> "Hello")
.thenApplyAsync(s -> s + " World")
.thenAcceptAsync(System.out::println);
```
这个例子中,我们首先使用`supplyAsync`方法创建了一个CompletableFuture对象,它会在另一个线程中执行一个任务,这个任务会返回一个字符串"Hello"。然后我们使用`thenApplyAsync`方法将这个CompletableFuture对象和一个函数串联起来,这个函数会将字符串"Hello"变成"Hello World"。最后我们使用`thenAcceptAsync`方法将这个CompletableFuture对象和一个消费者串联起来,这个消费者会将最终的结果打印出来。
除了上面的例子中使用的三个方法之外,CompletableFuture还提供了很多其他的方法,比如`thenCompose`、`thenCombine`、`allOf`、`anyOf`等等,它们可以让我们更灵活地组合异步操作。
相关问题
CompletableFuture用法
CompletableFuture是jdk8的新特性,它实现了CompletionStage接口和Future接口,提供了一种更加方便和顺畅的方式来处理多任务的协同工作。使用CompletableFuture可以实现异步编程、流式处理和多个Future的组合处理。
具体使用CompletableFuture的方法如下:
1. 使用runAsync方法创建异步任务,该方法没有返回值。
示例代码:
```
CompletableFuture<Void> cf = CompletableFuture.runAsync(() -> {
System.out.println("do something....");
});
cf.get(); //等待任务执行完成
```
2. 使用supplyAsync方法创建异步任务,该方法可以返回一个结果。
示例代码:
```
CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> {
System.out.println("do something....");
return "result";
});
cf.get(); //等待任务执行完成
```
3. 可以自定义线程池来执行异步任务。
示例代码:
```
ExecutorService executorService = Executors.newSingleThreadExecutor();
CompletableFuture<Void> cf = CompletableFuture.runAsync(() -> {
System.out.println("do something....");
}, executorService);
cf.get(); //等待任务执行完成
```
4. 可以对多个CompletableFuture进行组合处理,例如使用thenCompose、thenCombine、thenAccept等方法。
以上是CompletableFuture的基本用法,你可以根据具体的需求选择合适的方法来使用。
CompletableFuture 怎么使用
CompletableFuture 是 Java 8 引入的一个类,用于处理异步操作和并发编程。它提供了一种方便的方式来处理多个异步任务的结果,并且可以以函数式编程的方式进行链式操作。
要使用 CompletableFuture,首先需要创建一个 CompletableFuture 实例,并指定任务的执行逻辑。可以使用 CompletableFuture 的静态方法 `supplyAsync()` 或 `runAsync()` 来创建 CompletableFuture。
下面是一个示例代码,演示了如何使用 CompletableFuture:
```java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) {
// 创建一个 CompletableFuture 实例
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 异步执行的任务逻辑
return "Hello, World!";
});
// 链式操作
future.thenAccept(result -> {
System.out.println(result);
});
// 等待异步任务完成
try {
future.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
```
在上面的示例中,我们首先使用 `supplyAsync()` 方法创建了一个 CompletableFuture 实例,该方法接收一个 Supplier 函数式接口,用于执行异步任务。然后,我们使用 `thenAccept()` 方法来处理任务完成后的结果,并在控制台打印结果。最后,我们通过调用 `get()` 方法来等待异步任务完成。
除了 `thenAccept()` 方法,CompletableFuture 还提供了许多其他方法,如 `thenApply()`、`thenCombine()`、`thenCompose()` 等,用于处理任务的结果或组合多个 CompletableFuture。你可以根据具体的业务需求选择适合的方法来使用 CompletableFuture。
阅读全文