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

37.Java 异步回调(CompletableFuture 概述、CompletableFuture 使用)

一、CompletableFuture 概述

  • CompletableFuture 在 Java 里面被用于异步编程,异步通常意味着非阻塞,可以使得任务单独运行在与主线程分离的其他线程中,并且通过回调可以在主线程中得到异步任务的执行状态,是否完成,和是否异常等信息

  • CompletableFuture 实现了 Future, CompletionStage 接口,实现了 Future 接口就可以兼容现在有线程池框架,而 CompletionStage 接口是异步编程的接口抽象,里面定义多种异步方法,通过这两者集合,从而打造出了强大的 CompletableFuture 类


二、CompletableFuture 使用

1、无返回值的异步任务
(1)相关方法
  • runAsync 方法:异步调用没有返回值
public static CompletableFuture<Void> runAsync(Runnable runnable) {return asyncRunStage(asyncPool, runnable);
}
  • get 方法:阻塞直到任务结束后获取返回值
public T get() throws InterruptedException, ExecutionException {Object r;return reportGet((r = result) == null ? waitingGet(true) : r);
}
(2)具体实现
CompletableFuture<Void> completableFuture1 = CompletableFuture.runAsync(() -> {System.out.println(Thread.currentThread().getName() + " 1");
});
completableFuture1.get();
  • 结果
ForkJoinPool.commonPool-worker-9 1
2、有返回值的异步任务
(1)相关方法
  • supplyAsync 方法:异步调用有返回值
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier) {return asyncSupplyStage(asyncPool, supplier);
}
  • get 方法:阻塞直到任务结束后获取返回值
public T get() throws InterruptedException, ExecutionException {Object r;return reportGet((r = result) == null ? waitingGet(true) : r);
}
  • whenComplete 方法:异步调用完成后进行执行相关操作
public CompletableFuture<T> whenComplete(BiConsumer<? super T, ? super Throwable> action) {return uniWhenCompleteStage(null, action);
}
(2)具体使用
CompletableFuture<Integer> completableFuture2 = CompletableFuture.supplyAsync(() -> {
System.out.println(Thread.currentThread().getName() + " 2");return 1024;
});
completableFuture2.whenComplete((t, u) -> {// 参数 t 为返回值System.out.println(t);// 参数 u 为异常System.out.println(u);
});
  • 结果
ForkJoinPool.commonPool-worker-9 2
1024
null

相关文章:

37.Java 异步回调(CompletableFuture 概述、CompletableFuture 使用)

一、CompletableFuture 概述 CompletableFuture 在 Java 里面被用于异步编程&#xff0c;异步通常意味着非阻塞&#xff0c;可以使得任务单独运行在与主线程分离的其他线程中&#xff0c;并且通过回调可以在主线程中得到异步任务的执行状态&#xff0c;是否完成&#xff0c;和是…...

数学建模AI智能体(4.16大更新)

别的不说就说下面这几点&#xff0c;年初内卷到现在&#xff0c;就现阶段AI水平&#xff0c;卷出了我比较满意的作品&#xff0c;这里分享给各位同学&#xff0c;让你们少走弯路&#xff1a; 1.轻松辅导学生 2.帮助学习 3.突破知识壁垒&#xff0c;缩短与大佬的差距 4.打破…...

Python 第三节 流程控制

目录 1.分支结构 条件控制 2.循环语句 3.循环控制语句 4.嵌套循环 控制代码执行的顺序 顺序结构分支结构循环结构 1.分支结构 条件控制 让代码有自主选择的能力, 当满足某个条件的时候执行对应的操作 1.1 if语句 语法格式 if 判断条件:执行语句(当判断条件为真的时候执…...

深入探究Linux编译器gcc/g++:从基础到进阶

目录 一、编译的幕后流程 &#xff08;一&#xff09;预处理&#xff1a;宏与文件的魔法融合 &#xff08;二&#xff09;编译&#xff1a;代码规范性的严格审视 &#xff08;三&#xff09;汇编&#xff1a;迈向机器语言的关键一步 &#xff08;四&#xff09;连接&a…...

用户态网络缓冲区

用户态网络缓冲区 缓冲区作用 用于临时存储数据以便高效地进行读写操作。用户态缓冲区位于用户空间中&#xff0c;与内核空间中的缓冲区&#xff08;内核缓冲区&#xff09;相对。 用户态接受缓存区 粘包问题&#xff0c;缓存非完整数据包 生产者的速度 > 消费者的速…...

解决Flutter 2.10.5在升级Xcode 16后的各种报错

Flutter 环境 Flutter version 2.10.5Dart version 2.16.2DevTools version 2.9.2CocoaPods version 1.16.2Xcode 16.3 问题一&#xff1a;XCResult parsing error: Error: This command is deprecated and will be removed in a future release, --legacy flag is required t…...

【学习笔记】计算机网络(八)—— 音频/视频服务

第8章 互联网上的音频/视频服务 文章目录 第8章 互联网上的音频/视频服务8.1概述8.2 流式存储音频/视频8.2.1 具有元文件的万维网服务器8.2.2 媒体服务器8.2.3 实时流式协议 RTSP 8.3 交互式音频/视频8.3.1 IP 电话概述8.3.2 IP电话所需要的几种应用协议8.3.3 实时运输协议 RTP…...

OpenCv高阶(三)——图像的直方图、图像直方图的均衡化

目录 一、直方图 1、计算并显示直方图 2、使用matplotlib方法绘制直方图&#xff08;不划分小的子区间&#xff09; 3、使用opencv的方法绘制直方图 &#xff08;划分16个小的子亮度区间&#xff09; 4、绘制彩色图像的直方图&#xff0c;将各个通道的直方图值都画出来 二、…...

OpenCV 图形API(39)图像滤波----同时计算图像在 X 和 Y 方向上的一阶导数函数SobelXY()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::gapi::SobelXY 函数是 OpenCV 的 G-API 模块中用于同时计算图像在 X 和 Y 方向上的一阶导数&#xff08;即 Sobel 边缘检测&#xff09;的一…...

领麦微:电炖锅红外测温传感器应用,告别糊锅干烧

领麦微红外测温传感器在电炖锅中的应用&#xff0c;特别是在应对高温环境、实现精准测温以保留食材营养、有效防止干烧与糊锅现象&#xff0c;以及提供安全烹饪新保障等方面&#xff0c;展现出了其独特的技术优势和应用价值。以下是对这些应用特点的深入剖析&#xff1a; 一、高…...

(Linux操作系统)自定义shell的实现

讲自定义shell之前我们先看一个东西&#xff0c;那就是进程替换&#xff0c;我们想要父进程fork之后的子进程之后运行一个全新的程序那该怎么办呢&#xff1f; 这里就要用一个叫做进程替换的一个东西了&#xff0c;程序替换是通过特定的接⼝&#xff0c;加载磁盘上的⼀个全新的…...

安卓jks提取pem和pk8文件

你需要安装&#xff1a; Java Keytool OpenSSL 系统要求&#xff1a;Mac/Linux/Windows 都可以。 keytool -importkeystore -srckeystore holder-keystore.jks -destkeystore holder-keystore.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass yzhafzKPj4 -dest…...

人脸检测-人脸关键点-人脸识别-人脸打卡-haar-hog-cnn-ssd-mtcnn-lbph-eigenface-resnet

链接&#xff1a;https://pan.baidu.com/s/1VhGdyIW5GWuTNkfbCEc5eA?pwdz0eo 提取码&#xff1a;z0eo --来自百度网盘超级会员V2的分享 创建环境 conda create -n 环境名称python3.8 conda activate 环境名称 然后配置环境 pip install requirements.txt 运行程序&…...

Gobuster :dir、dns、vhost

Gobuster 及其相关技术知识​​必须​​用于法律明确允许的场景&#xff01;&#xff01;&#xff01; 1. dir 模式&#xff1a;目录/文件枚举 用途&#xff1a;扫描目标网站的目录和文件&#xff0c;常用于发现隐藏资源或敏感文件。 ​​关键参数​​&#xff1a; -u URL&am…...

Vue+Threejs项目性能优化

使用Vue和Three.js开发的项目&#xff0c;但运行一段时间后电脑内存就满了&#xff0c;导致性能下降甚至崩溃&#xff0c;分析内存泄漏的原因优化如下&#xff1a; 资源释放管理 手动释放Three.js资源&#xff1a; 在Vue组件的beforeDestroy或destroyed生命周期中&#xff0…...

Leetcode - 双周赛135

目录 一、3512. 使数组和能被 K 整除的最少操作次数二、3513. 不同 XOR 三元组的数目 I三、3514. 不同 XOR 三元组的数目 II四、3515. 带权树中的最短路径 一、3512. 使数组和能被 K 整除的最少操作次数 题目链接 本题实际上求的就是数组 nums 和的余数&#xff0c;代码如下&…...

[特殊字符] PostgreSQL MCP 开发指南

简介 &#x1f680; PostgreSQL MCP 是一个基于 FastMCP 框架的 PostgreSQL 数据库交互服务。它提供了一套简单易用的工具函数&#xff0c;让你能够通过 API 方式与 PostgreSQL 数据库进行交互。 功能特点 ✨ &#x1f504; 数据库连接管理与重试机制&#x1f50d; 执行 SQL…...

等离子体浸没离子注入(PIII)

一、PIII 是什么&#xff1f;基本原理和工艺 想象一下&#xff0c;你有一块金属或者硅片&#xff08;就是做芯片的那种材料&#xff09;&#xff0c;你想给它的表面“升级”&#xff0c;让它变得更硬、更耐磨&#xff0c;或者有其他特殊功能。怎么做呢&#xff1f;PIII 就像是用…...

TinyEngine 2.4版本正式发布:文档全面开源,实现主题自定义,体验焕新升级!

本文由体验技术团队李璇原创。 前言 TinyEngine低代码引擎使开发者能够定制低代码平台。它是低代码平台的底座&#xff0c;提供可视化搭建页面等基础能力&#xff0c;既可以通过线上搭配组合&#xff0c;也可以通过cli创建个人工程进行二次开发&#xff0c;实时定制出自己的低…...

gemini讲USRP

您好&#xff01;USRP (Universal Software Radio Peripheral) 是一种软件无线电 (SDR) 设备系列&#xff0c;由 Ettus Research (现为 National Instruments 旗下公司) 开发和销售。USRP 提供了一个灵活且可配置的平台&#xff0c;用于设计、原型开发和部署各种无线通信系统。…...

智能超表面通信控制板--通道电压并行控制版

可重构智能超表面&#xff08;Reconfigurable Intelligent Surface, RIS&#xff09;技术是一种新兴的人工电磁表面技术&#xff0c;它通过可编程的方式对电磁波进行智能调控&#xff0c;从而在多个领域展现出巨大的应用潜力。超表面具有低成本、低能耗、可编程、易部署等特点&…...

Spring Task(笔记)

介绍&#xff1a; 应用场景&#xff1a; cron表达式&#xff1a; cron表达式在线生成器&#xff1a; 入门案例&#xff1a;...

YOLOv3的改进思路与方法:解析技术难点与创新突破

YOLOv3作为目标检测领域的经典算法&#xff0c;凭借其出色的速度和性能平衡获得了广泛应用。然而&#xff0c;随着计算机视觉技术的不断发展&#xff0c;YOLOv3在某些场景下的局限性也逐渐显现。本文将深入分析YOLOv3的不足之处&#xff0c;并系统介绍常见的改进策略和方法&…...

【解锁元生代】ComfyUI工作流与云原生后端的深度融合:下一代AIGC开发范式革命

## 从单机到云原生的认知跃迁 当2023年Stable Diffusion WebUI还在争夺本地显卡性能时&#xff0c;ComfyUI已悄然开启工作流模块化革命&#xff1b;当2024年AI绘画工具陷入"参数调优内卷"&#xff0c;云原生技术正重塑AI开发的基础设施层。二者的深度融合&#xff0…...

shell 编程之正则表达式与文本处理器

目录 一、正则表达式 1. 概念 2. 作用 3. 分类 二、基础正则表达式&#xff08;BRE&#xff09; grep 命令选项 三、扩展正则表达式&#xff08;ERE&#xff09; 与 BRE 的区别 四、文本处理器 1. sed 工具 2. awk 工具 五、总结 总结对比 元字符总结 工具对比与…...

Shell编程之正则表达式与文本处理器

目录 一、引言 二、正则表达式 2.1 定义与用途 2.2 基础正则表达式 2.2.1 查找特定字符 2.2.2 利用中括号 “[]” 查找集合字符 2.2.3 查找行首 “^” 与行尾字符 “$” 2.2.4 查找任意一个字符 “.” 与重复字符 “*” 2.2.5 查找连续字符范围 “{}” 2.3 元字符总结…...

TMDOG——语言大模型进行意图分析驱动后端实践

语言大模型进行意图分析驱动后端实践 项目概述 项目地址&#xff1a;https://github.com/TMDOG666/AI_Backend_Demo 该项目通过语言大模型&#xff0c;通过分析用户意图、拆分任务、构建API调用链来驱动后端实践。 以一个简单的教务系统后端为例&#xff0c;将教务系统后端…...

未启用CUDA支持的PyTorch环境** 中使用GPU加速解决方案

1. 错误原因分析 根本问题&#xff1a;当前安装的PyTorch是CPU版本&#xff0c;无法调用GPU硬件加速。当运行以下代码时会报错&#xff1a;model YOLO("yolov8n.pt").to("cuda") # 或 .cuda()2. 解决方案步骤 步骤1&#xff1a;验证CUDA可用性 在Pyth…...

【mysql】Mac 通过 brew 安装 mysql 、启动以及密码设置

Mac 通过 brew 安装 mysql 、启动以及密码设置 使用 brew 安装 mysqlmysql 启动mysql密码设置参考文章&#xff1a; 使用 brew 安装 mysql brew install mysqlmysql 启动 下载完毕&#xff0c;终端告诉我们mysql数据库没有设置密码的&#xff0c;我们可以直接执行 mysql -u r…...

Vue2 nextTick

核心源码位置 Vue 2 的 nextTick 实现主要在 src/core/util/next-tick.js 文件中。 完整源码结构 import { noop } from shared/util import { handleError } from ./error import { isIE, isIOS, isNative } from ./envexport let isUsingMicroTask falseconst callbacks …...

Ubuntu 安装 NVIDIA显卡驱动、CUDA 以及 CuDNN工具

文章目录 一、简介二、查看显卡设备三、安装显卡驱动四、安装CUDA工具箱五、安装CuDNN小结 一、简介 NVIDIA 驱动&#xff1a;操作系统与 NVIDIA 显卡硬件之间的桥梁&#xff0c;负责驱动显卡硬件的运行&#xff0c;显卡的“底层操作系统”&#xff0c;一切的基础。CUDA&#…...

LeetCode算法题(Go语言实现)_50

题目 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, …] 。 实现 SmallestInfiniteSet 类&#xff1a; SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。 int popSmallest() 移除 并返回该无限集中的最小整数。 void addBack(int num) 如果正整数 …...

idea报错java: 非法字符: ‘\ufeff‘解决方案

解决方案步骤以及说明 BOM是什么&#xff1f;1. BOM的作用2. 为什么会出现 \ufeff 错误&#xff1f;3. 如何解决 \ufeff 问题&#xff1f; 最后重新编译&#xff0c;即可运行&#xff01;&#xff01;&#xff01; BOM是什么&#xff1f; \ufeff 是 Unicode 中的 BOM&#xff0…...

WPF依赖注入IHostApplicationLifetime关闭程序

WPF依赖注入IHostApplicationLifetime关闭程序 使用Application.Current.Shutdown();退出会报异常 应该使用 app.Dispatcher.InvokeShutdown(); Application.Current.Shutdown();app.Dispatcher.InvokeShutdown();static App app new();[STAThread]public static void Main(…...

如何在 IntelliJ IDEA 中安装通义灵码 - AI编程助手提升开发效率

随着人工智能技术的飞速发展&#xff0c;AI 编程助手已成为提升开发效率和代码质量的强大工具。在众多 AI 编程助手之中&#xff0c;阿里云推出的通义灵码凭借其智能代码补全、代码解释、生成单元测试等丰富功能&#xff0c;脱颖而出&#xff0c;为开发者带来了全新的编程体验。…...

【力扣】两两交换链表中的节点

两两交换链表中的节点 代码&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *n…...

数据共享交换平台之文件交换

数据共享交换平台的文件交换管理功能提供部门与部门之间的文件交换通道&#xff0c;满足跨部门之间文件交换需求。文件交换需要能够按照交换业务场景对交换通道进行分类管理。文件交换管理需满足如下要求&#xff1a; 1.文件交换统计&#xff1a;支持查看本部门与其他部门之间…...

什么是全球代理?如何选择全球代理服务?

在全球化不断深化的今天&#xff0c;互联网已经成为人类沟通、工作和学习的重要纽带。而全球代理则是这一纽带上的关键技术之一&#xff0c;它赋予了我们探索不同地区网络资源的能力。今天&#xff0c;我们来聊聊什么是全球代理、它能做什么&#xff0c;以及如何选择合适的全球…...

Spring Boot整合Kafka的详细步骤

1. 安装Kafka 下载Kafka&#xff1a;从Kafka官网下载最新版本的Kafka。 解压并启动&#xff1a; 解压Kafka文件后&#xff0c;进入bin目录。 启动ZooKeeper&#xff1a;./zookeeper-server-start.sh ../config/zookeeper.properties。 启动Kafka&#xff1a;./kafka-server-…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB WIFI测试 #WIFI蓝牙二合一 #RTL8733BU

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——USB…...

Doip功能寻址走UDP协议

目前使用 connect()函数的UDP客户端 ,这里接收数据 解析的地方 查看一下。 如果使用 bind()、sendto()、recvfrom() 组合 那么返回值 和发送要在做调整&#xff0c;&#xff0c;根据业务需要后续在调整 其余的 和原来的 逻辑都是一样的&#xff0c;只是协议变了而已。 if serv…...

硬件电路设计之51单片机(2)

声明&#xff1a;绘制原理图和PCB的软件为嘉立创EDA。根据B站尚硅谷嵌入式之原理图&PCB设计教程学习所作个人用笔记。 目录 一、原理图详解 1、TypeC接口 &#xff08;1&#xff09;TypeC接口介绍 &#xff08;2&#xff09;TypeC原理图 2、5V转3.3V 3、单片机电源开…...

Deeplizard 深度学习课程(一)—— Pytorch 和 Tensor 简介

前言 该pytorch笔记参考deeplizard官方网站课程&#xff0c;有相应视频和博客&#xff0c;链接如下&#xff1a; deeplizardhttps://deeplizard.com/learn/video/v5cngxo4mIg 1.Pytorch 简介 PyTorch 是一个深度学习框架和一个科学计算包。PyTorch 的科学计算方面主要是 PyTo…...

Delphi HMAC算法

1. 前言 今天做一个三方接口&#xff0c;接口文档描述签名采用MD5&#xff0c;但是实际测试过程中&#xff0c;始终校验不通过&#xff0c;经过和三方沟通&#xff0c;才知道采用的是HMAC-MD5。由于Delphi7没有对HMAC的支持&#xff0c;则采用XE版本来支持。本次使用Delphi XE …...

Ubuntu服务器性能调优指南:从基础工具到系统稳定性提升

一、性能监控工具的三维应用 1.1 监控矩阵构建 通过组合工具搭建立体监控体系&#xff1a; # 实时进程监控 htop --sort-keyPERCENT_CPU# 存储性能采集 iostat -dx 2# 内存分析组合拳 vmstat -SM 1 | awk NR>2 {print "Active:"$5"MB Swpd:"$3"…...

深度解析C++开源OCR引擎:架构、编译优化与工业级部署指南

1. 引言:OCR技术演进与现状分析 光学字符识别(OCR)技术经历了从传统模式识别到深度学习的三代发展: 第一代:基于模板匹配(1970s-1990s) 第二代:特征提取+分类器(1990s-2010s) 第三代:端到端深度学习(2010s-至今) 当前工业界主流方案呈现"双轨制"发展态势…...

关于Newtonsoft.Json

历史 Newtonsoft.Json&#xff08;也称为 Json.NET&#xff09;是由 James Newton - King 开发的一个开源的 JSON 处理库&#xff0c;它于 2007 年首次发布。在早期&#xff0c;.NET 平台缺乏一个强大且灵活的 JSON 处理工具&#xff0c;Newtonsoft.Json 应运而生&#xff0c;…...

Spark-Sql编程(三)

一、数据加载与保存 通用方式&#xff1a;使用spark.read.load和df.write.save&#xff0c;通过format指定数据格式&#xff08;如csv、jdbc、json等&#xff09;&#xff0c;option设置特定参数&#xff08;jdbc格式下的url、user等&#xff09;&#xff0c;load和save指定路…...

CTF--好像需要管理员

一、原网页&#xff1a; 二、步骤&#xff1a; 1.扫描&#xff1a; 发现&#xff1a;robots.txt 2.打开robots.txt&#xff1a; 3.打开resul.php&#xff1a; 4.代码解析&#xff1a; if ($_GET[x]$password) //检查通过 URL 参数 x 传递的值是否等于变量 $password 的值 详…...

耀圣控制设备有限公司总经理李雨蔓的创业之路

破浪者李雨蔓&#xff1a;从零到行业标杆的铿锵之路 在浙江永嘉这片被誉为“中国泵阀之乡”的热土上&#xff0c;一位86年出生的女性企业家&#xff0c;用十年光阴书写了一段白手起家的传奇。她&#xff0c;是一曲关于勇气、智慧与匠心的赞歌。从技术员到行业标杆的缔造者&…...