当前位置: 首页 > 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.lqws.cn/news/485173.html

相关文章:

  • 使用模板创建uniapp提示未关联uniCloud问题
  • 云侧工程云函数开发
  • AIGC技术的本质:统计学驱动的智能革命
  • react-route-dom@6
  • 深入剖析Flink内存管理:架构、调优与实战指南
  • SQL Server 基础语句3: 数据操作(插入、删除、更新表)与数据类型
  • 2025-06-22 思考-人的意识与不断走向死亡的过程
  • 如何仅用AI开发完整的小程序<6>—让AI对视觉效果进行升级
  • Linux 文件 I/O 与标准 I/O 缓冲机制详解
  • 21.安卓逆向2-frida hook技术-HookOkHttp的拦截器
  • 前端手写题(一)
  • UMAP:用于降维的均匀流形近似和投影实验
  • CSS 逐帧动画
  • JMeter API 并发性能测试计划JMX文件解析
  • Python 的内置函数 hex
  • JavaScript 的 “==” 存在的坑
  • C++法则2:对于一个调用,如果一个非函数模板与一个函数模板提供同样好的匹配,则选择非模板版本。
  • Vulkan 学习笔记14—模型加载(OBJ、glTF)
  • Elasticsearch、Faiss、Milvus在向量索引实现上的核心差
  • 利用通义大模型构建个性化推荐系统——从数据预处理到实时API部署
  • 微处理器原理与应用篇---常见基础知识(7)
  • 【编程语言基础算法】前缀和
  • 【C++】C++枚举、const、static的用法
  • 73、单元测试-断言机制
  • 发送与接收
  • Spring Boot 项目初始化
  • EXPLAIN优化 SQL示例
  • MySQL之索引结构和分类深度详解
  • UML:类图
  • 电脑商城--购物车