CompletableFuture 是 Java 8 引入的一个用于异步编程的工具类,它提供了一些方便的方法,使得异步编程变得更加容易。通过 CompletableFuture,你可以在异步任务完成时执行一些操作,也可以组合多个异步任务。
CompletableFuture
以下是一些 CompletableFuture 异步编排的常见操作:
创建一个CompletableFuture:
CompletableFuture<String> future = new CompletableFuture<>();
在 CompletableFuture 上应用转换操作:
CompletableFuture<String> originalFuture = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture<Integer> transformedFuture = originalFuture.thenApply(s -> s.length());
上述代码中,thenApply 方法在 originalFuture 完成时应用一个函数,将结果从字符串的长度转换为整数。
thenApply
originalFuture
组合两个 CompletableFuture 的结果:
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> " World"); CompletableFuture<String> combinedFuture = future1.thenCombine(future2, (s1, s2) -> s1 + s2);
thenCombine 方法在两个 CompletableFuture 都完成时应用一个函数,将它们的结果组合起来。
thenCombine
处理异常情况:
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { // Simulate an exception throw new RuntimeException("Something went wrong"); }); CompletableFuture<String> result = future.exceptionally(ex -> "Handled exception: " + ex.getMessage());
exceptionally 方法用于处理异常情况,返回一个新的 CompletableFuture 对象,其中包含了异常的处理逻辑。
exceptionally
执行异步任务并处理结果:
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { // Perform some asynchronous operation System.out.println("Async operation completed"); }); future.thenRun(() -> System.out.println("Result processing completed"));
runAsync 方法用于执行异步操作,而 thenRun 方法则在异步操作完成时执行后续的操作。
runAsync
thenRun
等待所有 CompletableFuture 完成:
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> " World"); CompletableFuture<Void> allOf = CompletableFuture.allOf(future1, future2); // 阻塞,直到所有 CompletableFuture 完成 allOf.join(); // 获取结果 String result1 = future1.get(); String result2 = future2.get();
allOf 方法等待所有的 CompletableFuture 完成。需要注意的是,allOf 会返回一个 CompletableFuture<Void>,而不是包含各个结果的 CompletableFuture<List<T>>。
allOf
CompletableFuture<Void>
CompletableFuture<List<T>>
这里只是 CompletableFuture 的一些基础用法,实际应用中可以根据具体的场景和需求来进行更复杂的异步编排。
原文链接:codingdict.net