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.pswp.cn/pingmian/85798.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85798.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85798.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32HAL库 -- 8.串口UART通信并开启printf功能

目录 1.简介 2.串口和UART 2.1串口的简介 2.2UART的简介 2.3UART通信协议 2.3.1波特率 2.3.2空闲位 2.3.3起始位 2.3.4数据位 2.3.5校验位 2.3.6停止位 3.STM32的UART 4.HAL库中常用的操作UART的函数 4.1UART初始化函数 -- HAL_UART_Init 4.2硬件初始化回调函数…

【PyTorch项目实战】CycleGAN:无需成对训练样本,支持跨领域图像风格迁移

文章目录 一、风格迁移模型&#x1f3a8;1、发展时间线2、分类与优缺点3、选择建议4、HuggingFace Demo&#xff08;instruct-pix2pix&#xff09; —— 在线测试 二、论文简读&#xff08;1&#xff09;FastStyleTransfer&#xff08;快速风格迁移&#xff0c;Johnson et al.,…

C#Halcon从零开发_Day14_AOI缺陷检测策略1_Bolb分析+特征分析_饼干破损检测

一、引言 *缺陷检测策略1&#xff1a;Blob分析特征分析 *Blob分析&#xff1a;阈值分割、开闭运算 (1) 图像预处理 目的&#xff1a;增强目标与背景的对比度&#xff0c;抑制噪声。 常用算子&#xff1a; threshold()&#xff1a;通过阈值分割将图像转换为二值图像。 mean_…

18年磨一剑!开利科技启动数字化增量投资新时代

当传统营销陷入流量困局&#xff0c;当数字化转型变成"面子工程"&#xff0c;广州开利网络用18年技术积淀给出新答案——"蚓链数字化生态营销系统"&#xff0c;让企业不再为数字化而数字化&#xff0c;而是通过数字化实现利润增长&#xff01; 核心亮点&am…

65-Oracle Undo机制

前一期看了Oracle在redo上保持事务前滚的一致性&#xff0c;同样Oracle在Undo的管理机制也是现代事务型数据库的工程典范。核心在于通过多版本并发控制&#xff08;MVCC&#xff09;技术&#xff0c;在保障数据一致性与提升系统性能之间实现精妙平衡。Undo机制构建了原子事务的…

【ESP32摄像头开发实例】-实现遥控视频小车

ESP32-CAM实现遥控视频小车 文章目录 ESP32-CAM实现遥控视频小车1、硬件准备2、代码实现3、代码解析4、程序下载到开发板在本文中,将详细介绍如何使用ESP32-CAM制作一辆Wi-Fi远程控制的小车。 1、硬件准备 在开始这个项目之前,我们将强调用于构建机器人的最重要的特性和组件…

图片加载优化(缩略图)

缩略图 系统目前的问题&#xff1a;首页直接加载原图&#xff0c;原图文件通常比缩略图大数倍甚至数十倍&#xff0c;不仅导致加载时间长&#xff0c;还会造成大量流量浪费。 解决方案&#xff1a;上传图片时&#xff0c;同时生成一份较小尺寸的缩略图。用户浏览图片列表时加…

GO语言---数组

文章目录 数组的基本特性数组的声明和初始化数组元素的访问和操作数组遍历多维数组数组的长度和容量数组作为函数参数数组与切片的区别注意 数组是Go语言中最基本的数据结构之一&#xff0c;它是一组相同类型元素的固定长度序列。 数组的基本特性 1、固定长度&#xff1a;数组…

7.5.3_1处理冲突的方法-拉链法

知识总览&#xff1a; 拉链法&#xff1a; 开始散列表中没有存储任何数据元素即散列地址上的元素是空的&#xff0c;散列地址可以视为链表的头指针&#xff0c;即没有插入任何元素前链表的头指针是空的。一个散列地址对应一个链表&#xff0c;散列地址上实际没有存数据元素&am…

鸿蒙运动项目开发:项目运行环境切换器

##鸿蒙核心技术##运动开发# 在开发鸿蒙运动项目时&#xff0c;管理不同运行环境&#xff08;如开发环境、测试环境、生产环境&#xff09;是一个常见的需求。通过合理地切换运行环境&#xff0c;开发者可以方便地进行调试、测试和部署。本文将介绍如何实现一个项目运行环境切换…

Linux内核中安全创建套接字:为何inet_create未导出及正确替代方案

引言 在Linux内核开发中,当驱动程序需要创建网络套接字时,开发者常会遇到一个关键问题:核心函数inet_create(负责初始化IPv4套接字)并未导出到内核符号表。本文深入剖析这一设计决策背后的逻辑,并提供驱动程序安全创建套接字的实践方案。 一、inet_create未导出的深层原…

63、不同路径II

题目 解答&#xff1a; 初始化和特殊情况比较麻烦的dp obstacleGrid(0,0)1的&#xff0c;直接return 0即可。入口都被堵住了还怎么走。 mn1情况&#xff0c;直接判断 第一行初始化&#xff1a;dp[1][0]->dp[i][0] 碰到有障碍物的&#xff0c;从当前格子开始到末尾全部置…

wx小程序登录设置角色

背景。pc端登录后在访问业务链接时可以根据固定获取用户的方法LoginUser user LoginHelper.getLoginUser(); 获取到用户信息。但wx端登录后无法获取。原因处在登陆时对用户信息的设置方面pc端和小程序端登录没有使用相同的登录方法。排除得知wx端小程序登录时没有设置角色。所…

MySQL5.7 慢查询SQL语句集合

文章目录 1. 按平均执行时间排序的慢查询2. 按总执行时长排序的慢查询3. MySQL 5.7 慢查询配置检查4. 扫描行数分析&#xff08;找出全表扫描&#xff09;5. 高频执行的慢查询6. 当前正在执行的查询7. 慢查询统计汇总8. 表结构和索引分析8.1 表索引详情查询8.2 表大小统计 1. 按…

MySQL学习(1)——基础库操作

欢迎来到博主的专栏:MySQL学习 博主ID:代码小豪 文章目录 数据库原理基础库操作增删数据库数据库编码与校验规则验证不同的校验规则对于库中数据的影响 备份与恢复数据库 数据库原理 mysql版本:mysql8.0 操作系统:ubuntu22.4 为了减少由于环境配置以及权限限制带来的使用问题&…

C++法则12:右值引用的核心目的:支持移动语义(Move Semantics)

C法则12&#xff1a;右值引用的核心目的&#xff1a;支持移动语义&#xff08;Move Semantics&#xff09; 右值引用&#xff08;Rvalue Reference&#xff09;是C11引入的最重要特性之一&#xff0c;其主要设计目的就是支持移动语义&#xff08;Move Semantics&#xff09;。 …

【LLM学习笔记4】使用LangChain开发应用程序(上)

目录 前言一、模型、提示和解析器&#xff08;model、prompt、parsers&#xff09;二、储存三、模型链四、基于文档的问答1.使用向量存储查询2. 结合表征模型和向量存储使用检索问答链回答问题 前言 在前面两部分&#xff0c;我们分别学习了大语言模型的基础使用准则&#xff…

Negative Contrastive Estimation Negative Sampling

1. 基本概念与问题背景 1.1 大规模分类问题 在自然语言处理中&#xff0c;给定上下文 c c c预测单词 w w w的条件概率为&#xff1a; P ( w ∣ c ) exp ⁡ ( s θ ( w , c ) ) ∑ w ′ ∈ V exp ⁡ ( s θ ( w ′ , c ) ) P(w|c) \frac{\exp(s_\theta(w,c))}{\sum_{w\in V…

Flink SQL Connector Kafka 核心参数全解析与实战指南

Flink SQL Connector Kafka 是连接Flink SQL与Kafka的核心组件&#xff0c;通过将Kafka主题抽象为表结构&#xff0c;允许用户使用标准SQL语句完成数据读写操作。本文基于Apache Flink官方文档&#xff08;2.0版本&#xff09;&#xff0c;系统梳理从表定义、参数配置到实战调优…

vscode内嵌浏览器实时预览vue项目

安装插件 web Preview 启动vue项目 打开预览 ctrl shift p 之后输入并选择 Open Web Preview 即可看到预览窗口&#xff0c;但此时明明我的页面是有内容的&#xff0c;但是窗口却空白的。 因为默认访问端口是3000&#xff0c;我们将其修改为vue项目默认的5173端口即可。 点…