CompletableFuture 是 java.util.concurrent 包的一部分,提供了一种以更具可读性和可维护性的方式编写异步、非阻塞代码的方法。它代表异步计算的未来结果。
从 CompletableFuture 开始,您可以创建一个简单的异步任务。这是一个例子:
import java.util.concurrent.CompletableFuture; public class CompletableFutureExample { public static void main(String[] args) { CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { System.out.println("Running asynchronously..."); // Simulate a long-running task try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }); future.join(); // Wait for the task to complete System.out.println("Task completed."); } }
演示结果:
Running asynchronously... Task completed.
您还可以使用CompletableFuture返回异步任务的结果:
import java.util.concurrent.CompletableFuture; public class CompletableFutureWithResult { public static void main(String[] args) { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // Simulate a computation return 5 * 5; }); future.thenAccept(result -> { System.out.println("The result is: " + result); }).join(); } }
演示结果:
The result is: 25
处理多个异步任务是一个常见的用例。 CompletableFuture 提供了多种组合 future 的方法。
您可以组合多个 CompletableFutures 的结果:
import java.util.concurrent.CompletableFuture; public class CombiningFutures { public static void main(String[] args) { CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 5); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 10); CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (result1, result2) -> result1 + result2); combinedFuture.thenAccept(result -> { System.out.println("Combined result: " + result); }).join(); } }
演示结果:
Combined result: 15
当需要等待多个 future 完成时,使用 CompletableFuture.allOf():
import java.util.concurrent.CompletableFuture; public class AllOfExample { public static void main(String[] args) { CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> { // Simulate task try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> { // Simulate another task try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }); CompletableFuture<Void> allOfFuture = CompletableFuture.allOf(future1, future2); allOfFuture.join(); System.out.println("All tasks completed."); } }
演示结果:
All tasks completed.
处理错误在异步编程中至关重要。 CompletableFuture 提供了管理异常的方法。
使用异常()处理异步任务中的异常:
import java.util.concurrent.CompletableFuture; public class ExceptionHandlingExample { public static void main(String[] args) { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Something went wrong!"); }).exceptionally(ex -> { System.out.println("Exception occurred: " + ex.getMessage()); return null; }); future.join(); } }
演示结果:
Exception occurred: Something went wrong!
在本指南中,我们探索了如何使用 CompletableFuture 处理 Java 中的并发请求。从创建简单的异步任务到组合多个 future 和处理错误,CompletableFuture 提供了一种健壮且灵活的异步编程方法。
如果您有任何疑问或需要进一步帮助,请随时在下面发表评论。我很乐意提供帮助!
阅读更多帖子:使用 Completable Future 处理 Java 中的多线程
以上是使用 Completable Future 处理 Java 中的多线程的详细内容。更多信息请关注PHP中文网其他相关文章!