JDK 21 中的虚拟线程与 Future

在 JDK 21 中,虚拟线程与 Future 的结合为异步编程提供了更强大和高效的解决方案。

Future 代表了异步计算的结果,通过它可以获取计算的状态和最终的结果。当与虚拟线程一起使用时,可以更灵活地管理和协调异步任务。

例如,在一个数据处理的场景中,需要从多个数据源获取数据并进行合并处理。可以使用虚拟线程来并发地从不同数据源获取数据,并将每个获取任务的结果封装在 Future 中。

以下是一个示例代码:

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class VirtualThreadWithFutureExample {public static void main(String[] args) {// 创建虚拟线程执行器ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();CompletableFuture<String> dataSource1Future = CompletableFuture.supplyAsync(() -> {// 模拟从数据源 1 获取数据System.out.println("Fetching data from Data Source 1");try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "Data from Source 1";}, executor);CompletableFuture<String> dataSource2Future = CompletableFuture.supplyAsync(() -> {// 模拟从数据源 2 获取数据System.out.println("Fetching data from Data Source 2");try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}return "Data from Source 2";}, executor);// 等待两个 Future 都完成,并合并结果CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(dataSource1Future, dataSource2Future).thenRun(() -> {try {// 假设 dataSource1Future 和 dataSource2Future 是 CompletableFuture 类型String dataSource1Result = dataSource1Future.join();String dataSource2Result = dataSource2Future.join();System.out.println("Combined Results: " + dataSource1Result + ", " + dataSource2Result);} catch (CompletionException e) {// 处理 CompletableFuture 特有的异常Throwable realException = e.getCause();realException.printStackTrace();}});executor.shutdown();}
}

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

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

相关文章

C++第二十七弹---优先级队列的高级应用:结合仿函数优化性能

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 priority_queue的介绍和使用 1.1 priority_queue的介绍 1.2 priority_queue的使用 2 仿函数的介绍和使用 2.1 仿函数的介绍 2.2 仿函数的…

Python升级打怪—Django入门

目录 一、Django简介 二、安装Django 三、创建Dajngo项目 (一) 创建项目 (二) 项目结构介绍 (三) 运行项目 (四) 结果 一、Django简介 Django是一个高级Python web框架&#xff0c;鼓励快速开发和干净、实用的设计。由经验丰富的开发人员构建&#xff0c;它解决了web开…

【文件fd】文件描述符fd | 文件描述表

目录 1.文件描述符fd 2.系统调用的0/1/2 3.C语言的stdin/stdout/stderr 4.系统调用的0/1/2和C语言的stdin/stout/stderr二者的关系❓ 5.文件描述表 5.1 文件描述符概念 5.3 文件对象strcut file 5.4 进程和文件对应关系 5.5 文件描述符理解 5.6 源码查看 1.文件描述…

谷粒商城实战笔记-55-商品服务-API-三级分类-修改-拖拽数据收集

文章目录 一&#xff0c;拖拽后结点的parentCid的更新二&#xff0c;拖拽后结点的父节点下所有结点的sort排序属性的变化更新排序的逻辑代码分析 三&#xff0c;拖拽后结点及其子节点catLevel的变化判断是否需要更新 catLevel获取拖动后的新节点 更新 catLevel完整代码 这一节的…

mysql特殊字符、生僻字存储设置

mysql utf-8模式下&#xff0c;分为ut8mb3,utf8mb4&#xff0c;mb4是支持特殊字符、emoji表情的&#xff0c;mb3是不支持的。 报错信息&#xff1a; 1### Error updating database. Cause: java.sql.SQLException: Incorrect string value: \xF0\xA8\x92\x82\xE6\x95... fo…

MongoDB教程(二十):MongoDB正则表达式

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、正则表…

【ESP32 idf 硬件I2C驱动MPU6050获取六轴数值】

目录 I2C介绍配置安装驱动通信创建&删除命令链接容器起始时序写数据读数据结束时序开始命令 mpu6050 硬件i2c驱动代码&调试代码调试 I2C 介绍 介绍部分可以看我写的【ESP32 idf 软件模拟I2C驱动MPU6050实现六轴加速度的获取】&#xff0c;这个是使用软件模拟的I2C时序…

python在类中手动定义标准化输出函数

在深度学习等训练框架中&#xff0c;有时候需要对模型的名称、参数量、训练进度、中间结果等进行标准化输出&#xff0c;从而方便实时查看代码运行情况&#xff0c;这时&#xff0c;可以在类中手动定义如下标准化的输出函数&#xff0c;然后在需要输出的地方进行调用即可。 首…

鸿蒙北向开发 DevEco Studio 4.1 下载安装傻瓜式教程

开篇 由于鸿蒙处于快速发展中,鸿蒙的api快速迭代更新,老版本的DevEco studio无法支持更新版本的api,因此华为官网放弃了老版本的维护.直接从华为开发者官网无法下载老版本,当前华为开发者官网已经推出next版本了 DevEco studio3.1安装教程 上述教程提供的华为开发者官网地址已经…

分布式事务-基本信息

文章目录 前言分布式事务-基本信息1. 两阶段提交&#xff08;2PC&#xff09;2. 三阶段提交&#xff08;3PC&#xff09;3. TCC模式4. 可靠消息最终一致性5. 优缺点与应用场景5.1. 两阶段提交&#xff08;2PC&#xff09;5.2. 三阶段提交&#xff08;3PC&#xff09;5.3. TCC模…

*算法训练(leetcode)第三十一天 | 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零

刷题记录 *1049. 最后一块石头的重量 II*494. 目标和474. 一和零 *1049. 最后一块石头的重量 II leetcode题目地址 本题与分割等和子集类似&#xff0c;要达到碰撞最后的石头重量最小&#xff0c;则尽可能把石头等分为两堆。 时间复杂度&#xff1a; O ( m ∗ n ) O(m * n)…

【ffmpeg命令入门】视频的旋转与翻转

文章目录 前言什么时候需要使用旋转与翻转1. 视频拍摄方向不正确2. 视频编辑特效使用什么参数1. 旋转视频 - transpose2. 水平翻转视频 - hflip3. 垂直翻转视频 - vflip 总结 前言 在视频编辑的过程中&#xff0c;我们经常会遇到需要旋转或翻转视频的情况。无论是因为拍摄时相…

如何在Ubuntu20.04上安装adb和fastboot

如何在Ubuntu20.04上安装adb和fastboot 步骤1.首先&#xff0c;通过apt在终端中运行以下以下命令&#xff0c;确保所有系统软件包都是最新的。 sudo apt update sudo apt upgrade 步骤2.在Ubuntu 20.04上安装ADB和Fastboot。 运行以下命令以在Ubuntu系统上安装ADB Fastboot二进…

linux怎么创建python

第一步&#xff0c;创建一个test文件夹。 第二步&#xff0c;打开终端进入该文件。 第三步&#xff0c;vim test.py。 第四步&#xff0c;编写代码。 第五步&#xff0c;编辑好之后&#xff0c;按Esc键切换到命令模式&#xff0c;然后输入:wq&#xff0c;再按回车键即可自动保存…

探索 SPL-404 协议标准:NFT 与 DeFi 的融合

在快速发展的数字资产领域中&#xff0c;NFT 协议标准持续演变&#xff0c;改变了我们对数字所有权和互动方式的理解。从 Art 到 Gamefi 等等&#xff0c;NFT 已经演变成数字经济的重要组成部分&#xff0c;吸引了广泛关注。遵循 ERC404 协议&#xff0c;SPL404 概念在 Solana …

动态预测的艺术:Mojo模型与实时调整的融合

动态预测的艺术&#xff1a;Mojo模型与实时调整的融合 在机器学习领域&#xff0c;模型的推理速度和准确性往往需要在实际应用中不断调整以达到最优状态。Mojo模型&#xff0c;作为ONNX&#xff08;Open Neural Network Exchange&#xff09;的一部分&#xff0c;提供了一种高…

AvaloniaUI的学习

相关网站 github:https://github.com/AvaloniaUI/Avalonia 官方中文文档&#xff1a;https://docs.avaloniaui.net/zh-Hans/docs/welcome IDE选择 VS2022VSCodeRider 以上三种我都尝试过&#xff0c;体验Rider最好。VS2022的提示功能不好&#xff0c;VSCode太慢&#xff0c…

flex/lex使用和学习

flex/lex用于生成解析配置文件的C代码&#xff0c;我们可以不用自己手动去做解析的工作&#xff0c;交由他们生成的代码去做。 假设&#xff0c;我有如下一个配置文件config.xml 配置文件中定义了三种channel,分别为SSIF, IPMB, NET&#xff0c;每一种channel都有4个int属性&a…

leetcode 461.汉明距离

1.题目要求: 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。示例 1&#xff1a;输入&#xff1a;x 1, y 4 输出&#xff1a;2 解释&#xff1a; 1 (0 0 0 1) 4 (0 1 0 0)↑ …

生成式AI:对话系统(Chat)与自主代理(Agent)的和谐共舞

生成式AI&#xff1a;对话与行动的和谐共舞 我们正站在一个令人激动的时代门槛上——生成式AI技术飞速发展&#xff0c;带来了无限的可能性。一个关键问题浮现&#xff1a;AI的未来是对话系统&#xff08;Chat&#xff09;的天下&#xff0c;还是自主代理&#xff08;Agent&am…