当前位置:实例文章 » JAVA Web实例» [文章]CompletableFuture

CompletableFuture

发布人:shili8 发布时间:2025-02-27 04:22 阅读次数:0

**CompletableFuture**

CompletableFuture 是 Java8 中引入的一种用于处理异步计算结果的类。它提供了一种高级别的 API,允许你以更简洁、更易用的方式来处理异步任务。

### 为什么需要 CompletableFuture?

在传统的 Java 编程中,异步编程通常涉及到使用线程池、Future 和 Callable 等类来实现。然而,这种方式往往会导致代码变得复杂和难以维护。

CompletableFuture 的出现解决了这个问题,它提供了一种更高级别的 API,使得异步编程变得更加简单和易用。

### CompletableFuture 的基本概念CompletableFuture 是一个表示异步计算结果的类。它可以被视为一个 Future 对象,但比传统的 Future 更强大,因为它支持更多的功能,例如链式操作、并发执行等。

CompletableFuture 有以下几个重要的方法:

* `supplyAsync()`:用于创建一个 CompletableFuture 对象,它将在后台线程中执行指定的 Supplier。
* `thenApply()`:用于指定当 CompletableFuture 完成时要执行的函数。
* `thenAccept()`:与 thenApply() 类似,但返回值类型为 Consumer。
* `thenRun()`:用于指定一个 Runnable,当 CompletableFuture 完成时要执行。
* `join()`:用于等待 CompletableFuture 完成,然后返回结果。

###例子下面是一个简单的例子,演示了如何使用 CompletableFuture 来异步计算两个数字的和:

javaimport java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class Main {
 public static void main(String[] args) throws ExecutionException, InterruptedException {
 // 创建两个CompletableFuture对象 CompletableFuture future1 = CompletableFuture.supplyAsync(() -> {
 try {
 Thread.sleep(1000); // 模拟耗时操作 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 return10;
 });

 CompletableFuture future2 = CompletableFuture.supplyAsync(() -> {
 try {
 Thread.sleep(2000); // 模拟耗时操作 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 return20;
 });

 // 使用thenApply()链式操作计算两个数字的和 CompletableFuture future = future1.thenApply(num1 -> num1 + future2.get());
 System.out.println(future.get()); // 输出结果 }
}


在这个例子中,我们创建了两个 CompletableFuture 对象,分别用于异步计算两个数字。然后,我们使用 thenApply() 方法来链式操作,这样当第一个 CompletableFuture 完成时,它会自动等待第二个 CompletableFuture 完成,然后执行指定的函数。

### 并发执行CompletableFuture 还支持并发执行多个任务。例如:

javaimport java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class Main {
 public static void main(String[] args) throws ExecutionException, InterruptedException {
 // 创建两个CompletableFuture对象 CompletableFuture future1 = CompletableFuture.supplyAsync(() -> {
 try {
 Thread.sleep(1000); // 模拟耗时操作 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 return10;
 });

 CompletableFuture future2 = CompletableFuture.supplyAsync(() -> {
 try {
 Thread.sleep(2000); // 模拟耗时操作 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 return20;
 });

 // 使用thenApply()链式操作计算两个数字的和 CompletableFuture future = future1.thenApply(num1 -> num1 + future2.get());
 System.out.println(future.get()); // 输出结果 // 并发执行多个任务 CompletableFuture allOfFuture = CompletableFuture.allOf(
 future1.thenAccept(System.out::println),
 future2.thenAccept(System.out::println)
 );
 allOfFuture.get(); // 等待所有任务完成 }
}


在这个例子中,我们使用 allOf() 方法来并发执行多个任务。allOf() 方法会等待所有传入的 CompletableFuture 完成,然后返回一个表示所有任务都已完成的 CompletableFuture 对象。

### 总结CompletableFuture 是 Java8 中引入的一种用于处理异步计算结果的类。它提供了一种高级别的 API,使得异步编程变得更加简单和易用。CompletableFuture 支持链式操作、并发执行等功能,可以帮助你更好地管理异步任务。

通过阅读本文,你应该已经了解了 CompletableFuture 的基本概念、使用方法以及如何在实际场景中应用它。如果你有任何问题或疑问,请随时与我联系。

其他信息

其他资源

Top