CompletableFuture的使用

CompletableFuture 是 Java 8 引入的异步编程工具,通过链式调用和非阻塞操作简化多线程任务编排。

创建异步任务

1.带返回值的任务

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");

2. ​无返回值的任务
使用 runAsync(),适用于仅执行操作的场景:

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> System.out.println("Running"));

3. ​自定义线程池
默认使用 ForkJoinPool.commonPool(),可通过参数指定自定义线程池优化资源管理:

这里可以结合spring 定义全局线程池来实现统一管理, 使用时将容器中的executor当做入参即可

ExecutorService executor = Executors.newCachedThreadPool();
CompletableFuture.supplyAsync(() -> "Task", executor);

链式调用与任务组合

1. ​结果转换
thenApply():将前序结果转换为新值:

future.thenApply(s -> s + " World"); // "Hello" → "Hello World"

2. 结果消费
thenAccept():仅消费结果不返回新值:

future.thenAccept(System.out::println); // 输出结果

3.​ 任务串联
thenCompose():将前序结果作为新异步任务的输入:

future.thenCompose(s -> CompletableFuture.supplyAsync(() -> s.length()));

4. 并行合并结果
thenCombine():合并两个独立任务的结果:

future1.thenCombine(future2, (res1, res2) -> res1 + res2);

5. ​多任务协同
allOf():等待所有任务完成;
anyOf():等待任一任务完成。

CompletableFuture.allOf(future1, future2).thenRun(() -> System.out.println("All done"));

异常处理

捕获异常并返回默认值
exceptionally():在异常时提供兜底结果:

future.exceptionally(ex -> "Fallback");

统一处理结果与异常
handle():无论成功或失败均执行操作:

future.handle((res, ex) -> ex != null ? "Error" : res);

超时控制

使用 orTimeout() 设置任务超时,超时后抛出 TimeoutException:

CompletableFuture.supplyAsync(() -> "Task").orTimeout(500, TimeUnit.MILLISECONDS).exceptionally(ex -> "Timeout: " + ex.getMessage());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73185.shtml

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

相关文章

GLB文件介绍

GLB文件是由支持glTF&#xff08;GL Transmission Format&#xff09;标准的软件或工具生成的。glTF是一种开放的3D模型传输格式&#xff0c;而GLB是其二进制版本&#xff0c;通常用于嵌入纹理和模型数据。以下是常见的生成GLB文件的软件和工具&#xff1a; 1. 3D建模软件 • …

计算机网络的分类及其性能指标

一. 计算机网络的分类 1. 按分布范围分类 广域网&#xff08;WAN&#xff09; 也称远程网。广域网提供长距离通信&#xff0c;通常是几十千米到几千千米的区域&#xff0c;比如跨国通信。连接广域网的各结点交换机的链路一般是高速链路&#xff0c;具有较大的通信容量城域网&…

gralloc usage flags

下面这些示例主要说明了 gralloc usage flags 在图像处理和多媒体应用中如何影响性能和正确性。让我们逐个详细分析每个问题的 根因 和 修复方案&#xff0c;并深入解析 gralloc 标志对 缓存管理 和 数据流 的影响。 ✅ Example 1: 长曝光快照耗时异常 &#x1f4cc; 问题描述…

关于kafka的一些知识总结

Kafka 1. 基本知识 1.1 前置知识 topic表示一个类型/业务的数据的组为方便扩展&#xff0c;提高吞吐率&#xff0c;一个topic分为多个partition。配合分区的设计&#xff0c;提出消费者组的概念&#xff0c;每个消费者并行消费&#xff0c;同时&#xff0c;一个分区的数据&a…

深入理解traceroute命令及其原理

traceroute 是一个网络诊断工具&#xff08;Windows上叫tracert&#xff09;&#xff0c;用于显示数据包从本地主机到远程主机经过的路由&#xff08;跳数&#xff09;。它可以帮助您了解数据包在网络中的传输路径&#xff0c;以及每跳的延迟情况。这对于网络故障排除、分析网络…

Spring 6: 3容器-Ioc

3、容器&#xff1a;IoC IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容…

git推送代码相关学习——(一)

推荐去阅读一下廖老师的git相关的教程https://liaoxuefeng.com/books/git/introduction/index.html 这个系列就来学习一下git操作。 第一步&#xff0c;新建项目 去github中新建一个项目&#xff0c;然后依据项目来进行本地的开发工作。 第二步&#xff0c;拉取项目 git c…

2025年渗透测试面试题总结-某深信服-深蓝攻防实验室(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 深信服-深蓝攻防实验室 一、内网攻击核心思路&#xff08;2025版&#xff09; 1. 攻击阶段分层 2. 最…

JAVA学习*Object类

Object类 Object类是所有类的父类 类中有一些方法&#xff08;都需要掌握&#xff09; toString()方法 在学习类的对象的时候有介绍过了&#xff0c;当我们重新给此方法就会打印类与对象的信息 equals()方法 在Java中的比较&#xff0c; 如果左右两侧是基本类型变量&#…

《Operating System Concepts》阅读笔记:p471-p472

《Operating System Concepts》学习第 37 天&#xff0c;p471-p472 总结&#xff0c;总计 2 页。 一、技术总结 1.NAS (1)定义 network-attached storage (NAS)&#xff1a;Storage accessed from a computer over a network. 虽然平时经常看到 NAS 这个名称&#xff0c;之…

gonet开源游戏服务器环境配置

1.mysql搭建 搜索mysql-server apt安装包名 sudo apt search mysql-server 安装mysql-server sudo apt-get install mysql-server 安装完成后会&#xff0c;启动mysql服务及创建系统服务 查看服务状态 systemctl status mysql.service 使用超级权限登陆mysql sudo mysql 授…

HarmonyOS NEXT(九) :图形渲染体系

HarmonyOS NEXT&#xff08;九&#xff09; &#xff1a;图形渲染体系 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 HarmonyOS NEXT&#xff0…

网络安全威胁与防护措施(上)

1. SQL注入&#xff08;SQL Injection&#xff09; SQL注入是一种常见的安全漏洞&#xff0c;攻击者通过在用户输入中插入恶意的SQL代码&#xff0c;从而篡改、操控数据库&#xff0c;执行未授权的数据库操作&#xff0c;如查询、修改、删除数据&#xff0c;甚至获取系统控制权…

3.22模拟面试

前端模拟面试&#xff08;1 年经验&#xff09; 面试时长&#xff1a;40-60 分钟 面试难度&#xff1a;初中级 技术栈&#xff1a;Vue 3、TypeScript、微前端&#xff08;qiankun&#xff09;、Webpack/Rspack、Ant Design、组件库迁移 一、基础知识 HTML & CSS 介绍一下…

kotlin 函数引用

引言 先确认一下&#xff0c;什么叫做引用 Object obj new Object() //这里的obj就是一个强引用 再确认一个结论&#xff1a; lambda 属于函数类型对象 。 fun methodResponseResult(msg: String , respo:(Int, String)->Unit){}fun methodRespoResunt(type: Int ,msg: S…

微前端qiankun框架的使用

文章描述 随着工作时间的增加&#xff0c;发现公司的项目逐渐多了起来&#xff0c;有一个项目比较庞大&#xff0c;是需要集成多个子系统而形成的大项目。其中便是使用微前端的概念qiankun框架来集成其他多个子项目的。接下来&#xff0c;一起来看一下qiankun框架的具体使用方…

基于CVX优化器的储能电池调峰调频算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 原理概述 4.2 CVX工具箱概述 5.完整工程文件 1.课题概述 基于CVX优化器的储能电池调峰调频算法matlab仿真。CVX 是一种用于求解凸优化问题的强大工具。凸优化问题具有良好的数学性质&#xff0c;能…

回归——数学公式推导全过程

文章目录 一、案例引入 二、如何求出正确参数 1. 最速下降法 1&#xff09;多项式回归 2&#xff09;多重回归 2. 随机梯度下降法 一、案例引入 以Web广告和点击量的关系为例来学习回归&#xff0c;假设投入的广告费和点击量呈现下图对应关系。 思考&#xff1a;如果花了…

微服务中的服务发现

微服务中的服务发现 什么是服务发现 服务发现是微服务架构中的关键机制&#xff0c;用于确定各个微服务的地址。例如&#xff0c;在一个 API Server 服务中&#xff0c;我们可能需要调用 User 服务来处理用户注册、登录和信息查询&#xff0c;也可能需要 Product 服务来获取商…

C#与西门子PLC的六大通信库

C#与西门子PLC的六大通信库&#xff1a; 一、S7.NET S7.NET是一款开源的S7协议通信库&#xff0c;支持西门子S7通信。 二、Sharp7 Sharp7与S7.NET一样&#xff0c;是一款.NET版本的S7通信库。 三、Snap7 Snap7是一个开源的C通信库&#xff0c;支持西门子S7通信。 四、Prodave P…