java CompletableFuture 怎么异步
时间: 2023-10-17 21:33:22 浏览: 82
Java 的 CompletableFuture 可以通过以下方式实现异步编程:
1. supplyAsync() 和 runAsync() 方法:CompletableFuture 类提供了 supplyAsync() 和 runAsync() 方法来创建异步任务。其中,supplyAsync() 方法可以返回一个 Future 对象,表示异步操作的结果;而 runAsync() 方法则不返回任何结果。
例如,下面的代码使用 supplyAsync() 方法创建一个异步任务,并在任务完成后打印结果:
```java
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 异步操作
return "Hello, world!";
});
future.thenAccept(result -> System.out.println(result));
```
2. thenApply()、thenAccept() 和 thenRun() 方法:CompletableFuture 类提供了 thenApply()、thenAccept() 和 thenRun() 方法来处理异步任务的结果。其中,thenApply() 方法可以对异步操作的结果进行转换,并返回一个新的 CompletableFuture 对象;thenAccept() 方法可以处理异步操作的结果,但不返回任何结果;而 thenRun() 方法则不处理异步操作的结果,只是执行一个 Runnable 对象。
例如,下面的代码使用 thenApply() 方法对异步操作的结果进行转换:
```java
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 异步操作
return "Hello, world!";
});
CompletableFuture<Integer> newFuture = future.thenApply(result -> result.length());
newFuture.thenAccept(length -> System.out.println("Length: " + length));
```
3. allOf() 和 anyOf() 方法:CompletableFuture 类提供了 allOf() 和 anyOf() 方法来等待多个异步操作完成。其中,allOf() 方法等待所有异步操作完成后返回一个 CompletableFuture<Void> 对象;而 anyOf() 方法等待任意一个异步操作完成后返回一个 CompletableFuture<Object> 对象。
例如,下面的代码使用 allOf() 方法等待多个异步操作完成:
```java
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
// 异步操作1
return "Hello";
});
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
// 异步操作2
return "world!";
});
CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2);
allFutures.thenRun(() -> {
String result1 = future1.join();
String result2 = future2.join();
System.out.println(result1 + result2);
});
```
需要注意的是,在 CompletableFuture 中,异步操作是通过 ForkJoinPool 实现的,因此可以使用 thenApplyAsync()、thenAcceptAsync() 和 thenRunAsync() 方法来将操作提交到 ForkJoinPool 中执行,从而实现异步操作。
阅读全文