Java 8 中 CompletableFuture 的 20 个实用示例分享

2024-12-31 06:36:50   小编

Java 8 中 CompletableFuture 的 20 个实用示例分享

在 Java 8 中,CompletableFuture 为异步编程提供了强大而灵活的工具。以下为您分享 20 个实用示例,帮助您更好地理解和运用 CompletableFuture。

示例 1:简单的异步任务 CompletableFuture future = CompletableFuture.runAsync(() -> { // 执行耗时操作 System.out.println("异步任务执行"); });

示例 2:异步任务并返回结果 CompletableFuture resultFuture = CompletableFuture.supplyAsync(() -> { return "异步计算的结果"; });

示例 3:组合多个 CompletableFuture CompletableFuture future1 = CompletableFuture.supplyAsync(() -> "任务 1 结果"); CompletableFuture future2 = CompletableFuture.supplyAsync(() -> "任务 2 结果");

CompletableFuture combinedFuture = CompletableFuture.allOf(future1, future2);

示例 4:处理异常 CompletableFuture future = CompletableFuture.runAsync(() -> { throw new RuntimeException("模拟异常"); }).exceptionally(ex -> { System.out.println("处理异常: " + ex.getMessage()); return null; });

示例 5:转换结果 CompletableFuture sourceFuture = CompletableFuture.supplyAsync(() -> "原始结果");

CompletableFuture transformedFuture = sourceFuture.thenApply(result -> result.length());

示例 6:异步任务的串行执行 CompletableFuture future1 = CompletableFuture.runAsync(() -> { System.out.println("任务 1 执行"); });

CompletableFuture future2 = future1.thenRun(() -> { System.out.println("任务 2 执行"); });

示例 7:根据条件执行不同的操作 CompletableFuture future = CompletableFuture.supplyAsync(() -> "结果");

CompletableFuture conditionBasedFuture = future.thenCompose(result -> { if (result.length() > 5) { return CompletableFuture.supplyAsync(() -> "长结果"); } else { return CompletableFuture.supplyAsync(() -> "短结果"); } });

示例 8:处理多个异步任务的结果 CompletableFuture future1 = CompletableFuture.supplyAsync(() -> "结果 1"); CompletableFuture future2 = CompletableFuture.supplyAsync(() -> "结果 2");

CompletableFuture combinedResultFuture = CompletableFuture.anyOf(future1, future2) .thenApply(obj -> { if (obj == future1.get()) { return "选择了结果 1"; } else { return "选择了结果 2"; } });

示例 9:超时处理 CompletableFuture future = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return "结果"; }).completeOnTimeout("超时结果", 1000);

示例 10:多个异步任务的顺序执行 CompletableFuture future1 = CompletableFuture.runAsync(() -> { System.out.println("任务 1 执行"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } });

CompletableFuture future2 = future1.thenRunAsync(() -> { System.out.println("任务 2 执行"); });

示例 11:异常传播 CompletableFuture future = CompletableFuture.runAsync(() -> { throw new RuntimeException("异常"); }).handle((result, ex) -> { if (ex!= null) { System.out.println("捕获异常: " + ex.getMessage()); } return null; });

示例 12:重复执行 CompletableFuture future = CompletableFuture.runAsync(() -> { System.out.println("第一次执行"); });

future.thenRun(() -> { System.out.println("第二次执行"); });

示例 13:结果合并 CompletableFuture future1 = CompletableFuture.supplyAsync(() -> "结果 1"); CompletableFuture future2 = CompletableFuture.supplyAsync(() -> "结果 2");

CompletableFuture mergedFuture = future1.thenCombine(future2, (result1, result2) -> result1 + result2);

示例 14:回调执行 CompletableFuture future = CompletableFuture.supplyAsync(() -> "结果");

future.thenAccept(result -> { System.out.println("接收结果: " + result); });

示例 15:条件判断 CompletableFuture future = CompletableFuture.supplyAsync(() -> "结果");

CompletableFuture conditionFuture = future.thenAcceptWhen(result -> result.length() > 5, () -> { System.out.println("满足条件"); });

示例 16:等待所有任务完成 CompletableFuture future1 = CompletableFuture.runAsync(() -> { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("任务 1 完成"); });

CompletableFuture future2 = CompletableFuture.runAsync(() -> { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("任务 2 完成"); });

CompletableFuture allFutures = CompletableFuture.allOf(future1, future2);

allFutures.join();

示例 17:任务取消 CompletableFuture future = CompletableFuture.runAsync(() -> { while (!Thread.currentThread().isInterrupted()) { // 执行任务 } });

// 取消任务 future.cancel(true);

示例 18:任务完成通知 CompletableFuture future = CompletableFuture.runAsync(() -> { System.out.println("任务执行"); });

future.whenComplete((result, ex) -> { if (ex == null) { System.out.println("任务完成"); } else { System.out.println("任务异常"); } });

示例 19:异步任务链 CompletableFuture future1 = CompletableFuture.supplyAsync(() -> "结果 1");

CompletableFuture future2 = future1.thenApply(result -> result + " 结果 2");

CompletableFuture future3 = future2.thenApply(result -> result + " 结果 3");

示例 20:自定义线程池 ExecutorService executor = Executors.newFixedThreadPool(5);

CompletableFuture future = CompletableFuture.runAsync(() -> { System.out.println("异步任务执行"); }, executor);

通过以上 20 个实用示例,相信您对 Java 8 中的 CompletableFuture 有了更深入的理解和掌握,能够在实际开发中更高效地运用异步编程。

TAGS: 实用示例 CompletableFuture Java 8 编程分享

欢迎使用万千站长工具!

Welcome to www.zzTool.com