网站建设佰金手指科杰六新闻大全
2026/2/7 2:20:54 网站建设 项目流程
网站建设佰金手指科杰六,新闻大全,成都网络营销公司排名,春雨直播免费视频下面用「核心场景 极简代码 一句话说明」的形式#xff0c;把CompletableFuture最常用的用法拆得更清晰#xff0c;只保留核心逻辑#xff0c;去掉冗余#xff1a;一、最基础#xff1a;创建异步任务#xff08;核心中的核心#xff09;场景 1#xff1a;无返回值 极简代码 一句话说明」的形式把CompletableFuture最常用的用法拆得更清晰只保留核心逻辑去掉冗余一、最基础创建异步任务核心中的核心场景 1无返回值比如广告统计、日志记录// 推荐自定义线程池避免默认池耗尽 Executor pool Executors.newFixedThreadPool(3); CompletableFuture.runAsync(() - { // 要异步执行的代码比如统计广告数据 System.out.println(异步执行无返回值任务); }, pool); // 极简版临时测试用 CompletableFuture.runAsync(() - System.out.println(异步执行无返回值任务));一句话runAsync 任务代码 可选自定义线程池执行完就结束不用返回结果。场景 2有返回值比如异步查数据库、调接口Executor pool Executors.newFixedThreadPool(3); CompletableFutureString future CompletableFuture.supplyAsync(() - { // 异步执行并返回结果比如查数据库返回字符串 return 异步任务的返回结果; }, pool); // 极简版 CompletableFutureString future CompletableFuture.supplyAsync(() - 返回结果);一句话supplyAsync 有返回值的代码能拿到异步任务的结果。二、拿到结果后怎么处理链式操作CompletableFutureString future CompletableFuture.supplyAsync(() - hello); // 1. 转换结果比如把hello变成hello world future.thenApply(str - str world); // 有返回值 // 2. 消费结果比如打印、存日志不用返回 future.thenAccept(str - System.out.println(拿到结果 str)); // 无返回值 // 3. 任务完事后执行不管结果比如弹个提示 future.thenRun(() - System.out.println(任务执行完了)); // 无返回值一句话thenApply改结果、有返回thenAccept用结果、无返回thenRun只执行、不关心结果。三、多任务配合多个异步任务怎么协同CompletableFutureString task1 CompletableFuture.supplyAsync(() - 任务1结果); CompletableFutureInteger task2 CompletableFuture.supplyAsync(() - 2); // 1. 串联执行任务1的结果传给任务2 task1.thenCompose(res1 - CompletableFuture.supplyAsync(() - res1 -任务2)); // 2. 合并结果任务1和任务2都做完合并结果 task1.thenCombine(task2, (res1, res2) - res1 res2); // 结果任务1结果2 // 3. 等所有任务做完比如批量处理10个异步任务 CompletableFuture.allOf(task1, task2).join(); // 阻塞等task1、task2都完成 // 4. 只要有一个任务做完比如多接口抢结果 CompletableFuture.anyOf(task1, task2); // 谁先做完就用谁的结果一句话thenCompose任务串着来thenCombine任务并行做、合并结果allOf等所有任务anyOf等第一个完成的任务。四、必加异常处理避免异步异常丢了CompletableFutureString future CompletableFuture.supplyAsync(() - { throw new RuntimeException(任务出错了); // 模拟异常 }); // 1. 异常兜底出错了返回默认值 future.exceptionally(e - { System.err.println(捕获异常 e.getMessage()); return 出错后的默认值; // 异常时返回这个值 }); // 2. 完成回调不管成功/失败都执行 future.whenComplete((res, e) - { if (e ! null) { System.err.println(任务失败 e.getMessage()); } else { System.out.println(任务成功 res); } });一句话exceptionally出错了给个兜底值whenComplete成功 / 失败都能处理。五、最后怎么拿结果尽量少阻塞CompletableFutureString future CompletableFuture.supplyAsync(() - 返回结果); // 1. 阻塞拿简单推荐用这个 String res1 future.join(); // 出错抛运行时异常不用try-catch // 2. 超时拿防止卡死更安全 String res2 future.get(1, TimeUnit.SECONDS); // 1秒拿不到就抛超时异常需try-catch // 3. 非阻塞拿拿不到就给默认值 String res3 future.getNow(默认值); // 任务没做完就返回默认值一句话join()简单阻塞拿结果get(超时)防止无限等getNow()不阻塞拿不到就兜底。最终核心总结记这几句就够无返回值异步runAsync(任务, 线程池)有返回值异步supplyAsync(任务, 线程池)处理结果转结果用thenApply、用结果用thenAccept多任务串着做thenCompose、合并结果thenCombine、等全部allOf异常必加exceptionally/whenComplete拿结果优先join()简单或get(超时)安全。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询