当前位置: 首页 > news >正文

【Java并发编程实战】CompletableFuture 核心功能使用场景详解

并发是Java进阶的分水岭也是拉开薪资差距的核心能力。为了帮大家避开碎片化学习误区我整理了一套​​《Java并发编程实战》​​视频课覆盖线程基础、JMM底层、锁机制、JUC工具、线程池、并发设计模式与线上实战。全程原理源码实战调优一站式打通零基础也能轻松吃透Java并发彻底摆脱技术瓶颈。基础用法import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; public class BasicExample { public static void main(String[] args) throws ExecutionException, InterruptedException { // 示例 1: 异步执行简单任务 CompletableFutureString future CompletableFuture.supplyAsync(() - { try { Thread.sleep(1000); // 模拟耗时操作 } catch (InterruptedException e) { throw new IllegalStateException(e); } return 任务完成; }); System.out.println(主线程继续执行...); System.out.println(结果: future.get()); // 阻塞获取结果 // 示例 2: 链式调用 CompletableFuture.supplyAsync(() - Hello) .thenApply(s - s World) .thenApply(String::toUpperCase) .thenAccept(System.out::println); // 输出: HELLO WORLD } }组合多个 Futureimport java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class CombineExample { public static void main(String[] args) { // 示例 1: thenCombine - 合并两个独立任务的结果 CompletableFutureString future1 CompletableFuture.supplyAsync(() - { sleep(1); return 用户信息; }); CompletableFutureString future2 CompletableFuture.supplyAsync(() - { sleep(2); return 订单信息; }); future1.thenCombine(future2, (result1, result2) - 组合结果: result1 result2) .thenAccept(System.out::println); // 示例 2: allOf - 等待所有任务完成 CompletableFutureVoid allFutures CompletableFuture.allOf( CompletableFuture.runAsync(() - System.out.println(任务1完成)), CompletableFuture.runAsync(() - System.out.println(任务2完成)), CompletableFuture.runAsync(() - System.out.println(任务3完成)) ); allFutures.thenRun(() - System.out.println(所有任务都完成了)); sleep(3); } private static void sleep(int seconds) { try { TimeUnit.SECONDS.sleep(seconds); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }异常处理import java.util.concurrent.CompletableFuture; public class ExceptionHandlingExample { public static void main(String[] args) { // 示例 1: exceptionally - 异常恢复 CompletableFutureString future CompletableFuture.supplyAsync(() - { if (Math.random() 0.5) { throw new RuntimeException(模拟异常); } return 成功结果; }).exceptionally(ex - { System.out.println(发生异常: ex.getMessage()); return 默认值; }); future.thenAccept(System.out::println); // 示例 2: handle - 无论成功失败都处理 CompletableFuture.supplyAsync(() - { return 处理数据; }).handle((result, ex) - { if (ex ! null) { return 异常处理: ex.getMessage(); } return 成功: result; }).thenAccept(System.out::println); // 示例 3: whenComplete - 完成后回调 CompletableFuture.supplyAsync(() - 任务执行) .whenComplete((result, ex) - { if (ex ! null) { System.out.println(任务失败: ex.getMessage()); } else { System.out.println(任务成功: result); } }); } }这些示例展示了 CompletableFuture 的核心功能可以根据具体需求组合使用。扩展CompletableFuture 的线程池默认线程池ForkJoinPoolpublic class DefaultThreadPoolExample { public static void main(String[] args) { // 默认使用 ForkJoinPool.commonPool() CompletableFutureString future1 CompletableFuture.supplyAsync(() - { System.out.println(线程: Thread.currentThread().getName()); return 默认线程池; }); // 查看默认线程池信息 ForkJoinPool commonPool ForkJoinPool.commonPool(); System.out.println(并行度: commonPool.getParallelism()); System.out.println(活跃线程数: commonPool.getActiveThreadCount()); } }自定义线程池import java.util.concurrent.*; public class CustomThreadPoolExample { public static void main(String[] args) { // 创建自定义线程池 ExecutorService customExecutor Executors.newFixedThreadPool(5); // 使用自定义线程池 CompletableFutureString future1 CompletableFuture.supplyAsync(() - { System.out.println(任务1 - 线程: Thread.currentThread().getName()); return 结果1; }, customExecutor); CompletableFutureString future2 CompletableFuture.supplyAsync(() - { System.out.println(任务2 - 线程: Thread.currentThread().getName()); return 结果2; }, customExecutor); // 关闭线程池 customExecutor.shutdown(); } }并发是Java进阶的分水岭也是拉开薪资差距的核心能力。为了帮大家避开碎片化学习误区我整理了一套​​《Java并发编程实战》​​视频课覆盖线程基础、JMM底层、锁机制、JUC工具、线程池、并发设计模式与线上实战。全程原理源码实战调优一站式打通零基础也能轻松吃透Java并发彻底摆脱技术瓶颈。
http://www.gsyq.cn/news/1405083.html

相关文章:

  • 基于混合方法的井盖与楼梯识别:计算机视觉辅助导航技术解析
  • Unity ShaderGraph实战:从零构建你的第一个可视化着色器
  • 3大难题+1个方案:终极破解大众点评动态字体加密,完整获取30+餐饮数据维度
  • 商城系统推荐适合连锁企业的解决方案,从单店到百店的系统升级攻略 - FaiscoJeff
  • 天龙八部单机版GM工具:终极免费管理工具快速上手指南
  • alist-strm终极指南:10分钟搞定流媒体自动化管理,告别手动创建STRM文件
  • 4大ELISA检测方法全解析,ELISA试剂盒挑选攻略请收好
  • 扣子+DeepSeek V4:零代码搭建你的私人AI助手,5分钟搞定
  • ChatGPT帮助中心内容结构深度拆解:3层知识图谱+5类高频问题归因,助你3分钟定位精准答案
  • 告别原生IDE:在VS Code中高效配置与使用Arduino开发环境
  • 区块链子指纹生成算法原理:AI内容规模化确权的信任基础设施
  • STM32串口通信学习笔记
  • 缠论量化框架:3大创新技术实现自动化交易系统
  • 深圳帝舵碧湾洗个手就起雾?防水胶圈老化是元凶,更换一次管几年?表主亲测 - 亨得利官方维修中心
  • 记一次odu恢复Oracle 10g过程
  • 【ChatGPT面试题设计黄金法则】:20年HR Tech专家首曝5类高区分度问题及避坑清单
  • 开发AI Agent时如何利用Taotoken聚合端点简化多模型调用
  • 庆阳6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • SKILL.md 高级编写技巧与最佳实践
  • 【AI面试临阵磨枪-74】企业级 AI 平台:多租户、模型管理、RAG 流水线、低代码搭建
  • Citra模拟器新手入门指南:3个核心技巧让3DS游戏在PC上流畅运行
  • 卫星物联网、SGP.32商用,下一代物联网胜负手:连接能否被调度?
  • 实用指南:如何高效使用Nginx配置文件格式化工具提升代码可读性
  • 虚拟化- x86功率修改方法
  • LRCGet:本地音乐歌词同步的终极解决方案与完整指南
  • 2026医院车位引导系统方案避坑指南及三大口碑品牌解读
  • 2026武汉婚纱照综合实力排名:五大核心维度精选品质与服务双优品牌 - 江湖评测
  • 上海浪琴名匠一天慢十秒,走时校准要花多少钱?实测康卡斯、名匠、心月的调校费用 - 亨得利官方维修中心
  • 开关电源测试板制作的经验分享
  • 近场ISAC系统:多波导夹持天线阵列与PSO-GA协同优化