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

线程池异步处理

List<CompletableFuture<Void>> futures = new ArrayList<>();// 提交10个异步任务
for (int i = 0; i < 10; i++) {CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {insertData(batchData); // 每个任务插入一批数据}, pool).thenAccept();futures.add(future); // 将Future对象存入列表
}// 等待所有任务完成
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();

通过CompletableFuture或回调函数,调用线程无需等待任务完成,实现真正的异步Future

ExecutorService pool = Executors.newFixedThreadPool(2);
List<CompletableFuture<Void>> futures = new ArrayList<>();for (int i = 1; i <= 3; i++) {int taskId = i;CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {Thread.sleep(1000);return "Result-" + taskId;}, pool).thenAccept(result -> {System.out.println("[Callback] Task " + taskId + " => " + result);});futures.add(future); // 保存Future对象
}// 等待所有任务完成(阻塞主线程)
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
pool.shutdown();
System.out.println("所有任务完成!");

没有future会咋样?

(1) 主线程不会等待任务完成
(2) 无法统一处理任务状态
  • 失去的能力

    • 无法通过 CompletableFuture.allOf() 等待所有任务完成。

    • 无法统计成功/失败的任务数量。

无法集中处理异常(如记录失败日志或重试)

Q:我都要主线程等待了,为啥还用异步,直接用普通线程池不就行了

使用 异步任务(如 CompletableFuture)+ 主线程等待 相比 普通线程池阻塞等待,在以下场景中具有显著优势:

  1. 灵活组合任务:可轻松实现“任务并行→结果聚合”的流程(如 allOf/anyOf)。

  2. 非阻塞回调:即使主线程等待,仍能通过回调处理中间结果(如进度更新)。

http://www.lryc.cn/news/573955.html

相关文章:

  • 分布式ID生成方式及优缺点详解
  • 【Datawhale组队学习202506】YOLO-Master task03 IOU总结
  • uni-app项目实战笔记23--解决首次加载额外图片带来的网络消耗问题
  • 人工智能、机器人最容易取哪些体力劳动和脑力劳动
  • day03-微服务01
  • 《Nature Commun》(中科院1区, IF17.694): CITE-seq+空间转录组解析SSc免疫异质性
  • MySQL学习(1)——基础库操作
  • 【C++开发】CMake构建工具
  • 系统思考:救火先放火
  • (线性代数最小二乘问题)Normal Equation(正规方程)
  • 【边缘计算】ECA、ECN、ECI
  • 逆向某物 App 登录接口:还原 newSign 算法全流程
  • springboot 提供的可扩展接口
  • Element表格表头合并技巧
  • 30天pytorch从入门到熟练(day1)
  • VS2019调试进入FFmpeg源码
  • Vulkan 学习笔记15—Mipmap 与多重采样
  • 【webSocket】WebSocket全双工通信实战指南
  • 从零开始手写redis(15)实现自己的 HashMap
  • java专题漏洞总结 + 靶场练习
  • 【学习笔记】深入理解Java虚拟机学习笔记——第10章 前端编译与优化
  • RA4M2开发IOT(10)----集成LPS22DF气压计
  • 扫雷中的数学原理
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月22日第116弹
  • 64-Oracle Redo Log
  • 肖臻《区块链技术与应用》第六讲:比特币网络
  • 点点(小红书AI搜索):生活场景的智能搜索助手
  • 数据库(1)-SQL
  • C++ - 标准库之 <string> npos(npos 概述、npos 的作用)
  • 2140、解决智力问题