CompletableFuture
是 Java 8 引入的一个强大的异步编程工具,它允许你以声明式的方式编写复杂的异步代码。CompletableFuture
可以表示一个异步计算的结果,并且可以链式地处理这些结果。
CompletableFuture
允许你在等待异步操作完成时执行其他任务,从而提高程序的效率。thenApply
, thenAccept
, thenRun
等方法链式地处理异步操作的结果。CompletableFuture
本身是一个泛型类,可以表示任何类型的异步计算结果。
适用于需要处理大量异步任务的场景,如网络请求、文件读写、数据库操作等。
如果第一个 CompletableFuture
失败,则不执行第二个 CompletableFuture
。
可以使用 exceptionally
方法来处理第一个 CompletableFuture
的异常,并在其中决定是否继续执行第二个 CompletableFuture
。
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) {
CompletableFuture<String> firstFuture = CompletableFuture.supplyAsync(() -> {
// 模拟第一个异步操作失败
throw new RuntimeException("First future failed");
});
CompletableFuture<String> secondFuture = firstFuture.exceptionally(ex -> {
System.out.println("First future failed: " + ex.getMessage());
return null; // 返回一个默认值或null
}).thenApply(result -> {
if (result == null) {
System.out.println("Second future will not be executed");
return null;
}
// 模拟第二个异步操作
return "Second future result";
});
try {
System.out.println(secondFuture.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
CompletableFuture
失败:在 supplyAsync
方法中抛出一个异常。exceptionally
方法捕获第一个 CompletableFuture
的异常,并返回一个默认值(如 null
)。CompletableFuture
:在 thenApply
方法中检查第一个 CompletableFuture
的结果,如果为 null
,则不执行第二个异步操作。通过这种方式,你可以灵活地控制异步操作的流程,确保在第一个 CompletableFuture
失败时,不会执行第二个 CompletableFuture
。
领取专属 10元无门槛券
手把手带您无忧上云