JDK19虚拟线程

虚拟线程的定义及使用 长期以来,虚拟线程是 Java 中最重要的创新之一。 它们是在 Project Loom 中开发的,自 Java 19 作为预览功能以来一直包含在 JDK 中,自 Java 21 作为最终版本 (JEP 444) 以来,它们已包含在 JDK 中。 阅读详情

JDK 19引入的虚拟线程,是JDK 实现的轻量级线程,他可以避免上下文切换带来的的额外耗费;

他的实现原理其实是JDK不再是每一个线程都一对一的对应一个操作系统的线程了,而是会将多个虚拟线程映射到少量操作系统线程中,通过有效的调度来避免那些上下文切换。

虚拟线程:操作系统线程=1:N的示例图:

我们可以在应用程序中创建非常多的虚拟线程,而不依赖于平台线程的数量。这些虚拟线程是由JVM管理的,因此它们不会增加额外的上下文切换开销,因为它们作为普通Java对象存储在RAM(内存)中。

本文给大家介绍了一下JDK 19新推出的虚拟线程,或者叫协程,主要是为了解决在读书操作系统中线程需要依赖内核线程的实现,导致有很多额外开销的问题。通过在Java语言层面引入虚拟线程,通过JVM进行调度管理,从而减少上下文切换的成本。

但是使用的时候也需要注意,虚拟线程是守护线程,所以有可能会没等他执行完虚拟机就会shutdown掉。

什么是虚拟线程? 虚拟线程是轻量级线程,可以减少编写维护和调试高吞吐量并发应用程序的工作量。线程是可以调度的最小处理单元。它与其他此类单元同时运行,并且在很大程度上独立于其他单元。它是的一个实例。线程有两种:平台线程和虚拟线程。虚拟线程是由 Java 运行时而不是操作系统实现的 Java 线程。虚拟线程与传统线程(我们称之为平台线程)的主要区别在于,我们可以在同一个 Java 进程中轻松运行大量甚至数百万个活动虚拟线程。 阅读详情

相关推荐

虚拟线程详解

虚拟线程又叫协程。JDK19 中引入了虚拟线程,这是一个重大的更新项,虚拟线程在Project Loom项目中已经孵化很久了。据官方阐述,引入的原因是。允许通过 java.lang.ThreadAPI 的现有代码来使用虚拟线程,并且只做最小的更改。(当然虚拟线程不是Java语言独有的,更不是Java发明的,只是JDK19时才引入,比如Go语言的goroutines和Erlang语言早就支持虚拟线程了)各种语言争相引入虚拟线程的原因就是它能以简单的方式来提高系统并发性能。那么虚拟线程是怎么做到的?

2136

Java 虚拟线程(Virtual Threads):原理、性能提升与实践

Java 虚拟线程通过轻量级设计和高效调度,显著提升 I/O 密集型任务性能。核心机制包括 Continuation、ForkJoinPool 和 NIO 集成,使百万级并发成为可能。零售案例展示虚拟线程将 QPS 从 1000 提升至 5000,延迟从 200ms 降至 50ms,内存占用降低 75%。优先在 I/O 密集型任务中使用虚拟线程。避免同步阻塞,使用和。结合 JFR 和 Prometheus 监控性能。对于 CPU 密集型任务,保留线程池。

lssffy的博客 4067

使用JDK 19虚拟线程的Web框架:Quarkus如何支持Java虚拟线程

Quarkus的集成简化了虚拟线程的使用,并提供了与其他Quarkus功能的完美集成。总结而言,Quarkus是一个用于构建现代化Java应用程序的框架,它集成了JDK 19的虚拟线程功能,以提供更高的性能和资源利用率。首先,我们需要确保我们的项目使用了适当的Quarkus版本,以支持虚拟线程功能。这样,我们可以确保我们的代码在虚拟线程上运行,从而实现更高效的并发处理。在本文中,我们将探讨Quarkus如何支持JDK 19的虚拟线程,并通过源代码来了解其实现细节。在上面的示例中,我们使用了。

TechChamp的博客 193

JDK19 - Virtual Thread 虚拟线程探究

先说下我们一般JDK8开发过程中使用到的线程,这部分线程我们称之为平台线程(为的就是和虚拟线程做区分)。平台线程在底层操作系统线程上运行Java代码,并在代码的整个生命周期中捕获操作系统线程。但是在JDK19当中的虚拟线程,他们则是用户模式线程。即由应用程序自己实现和管理的,而不是由操作系统内核实现和管理。

Zong_0915的博客 1684

Chronos时间序列预测实战:从零开始微调你的第一个大语言模型(附完整代码)

本文提供了一份详细的Chronos时间序列预测大语言模型微调实战指南。从环境搭建、数据预处理到模型配置与训练,手把手教你如何利用自己的数据微调Chronos模型,并完成评估与部署,助你快速掌握这一前沿技术。

zzz56的博客 300

CMake、Make、MinGw、Clang、Llvm、GCC、MSVC的区别

除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具;的缩写,MinGw是windows版本的gcc集合。并不仅是一个 C/C++ 编译器,而是一套。是微软开发的VC运行时库,3、Make和CMake是。

m0_37698164的博客 1万+

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

本篇借助JProfiler工具,从线程的观察结果去印证官方资料,做到理论结合实践,让您领先一步,掌握和了解神秘的虚拟线程内幕

程序员欣宸的博客 1569

如何设计一个处理物联网设备数据流的后端系统。

设计一个处理物联网设备数据流的后端系统,需要综合考虑设备数据采集、传输、处理、存储等多个方面,保证系统能够处理海量数据,具备高可用性、扩展性和安全性。合理选择适当的技术架构和工具(如MQTT、Kafka、InfluxDB等),并确保系统能够灵活应对不断变化的业务需求和设备接入。

weixin_53227829的博客 841

如何在IntelliJ IDEA中使用JDK 19的虚拟线程?

通过以上配置,即可在 IntelliJ IDEA 中充分利用 JDK 19 的虚拟线程特性提升并发性能。虚拟线程在 JDK 19 中属于。

xfmtznfl2165pv的博客 799

【ECCV 2024】动态范围直方图自注意力DHSA,即插即用!

直方图自注意力机制,将空间特征按强度分段并进行分组,然后在各个分组内或分组间应用自注意力,以选择性地关注具有动态范围的空间特征,并处理长距离内相似退化的像素。

qq_43303160的博客 1846

华为OD机试真题2025双机位A卷 Java&Go 实现【采购订单】

在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。

MISAYAONE的博客 1261

JDK19虚拟线程初探(三)

总共花三篇文章大概介绍了JDK19中新增的虚拟线程,从LOOM Project的纤程、阿里的wisp和wisp2、到今天JEP 425中的虚拟线程,官方提供的生产可用的用户态线程方案距离我们越来越近了。

860MHz的专栏 986

成对使用离轴抛物面反射镜的设计

成对使用离轴抛物面反射镜的设计

weixin_72050316的博客 638

JDK19虚拟线程初探(一)

经过多年的等待后,JEP 425: Virtual Threads (Preview)终于带来了虚拟线程,这一轻量级的线程模型对标其他语言中的协程,能够显著的减少编写、维护和观察高并发应用程序的工作量。

860MHz的专栏 737

48、住宅抵押贷款支持证券的定价、风险评估与结构化设计

本文深入探讨了住宅抵押贷款支持证券(RMBS)的定价、风险评估与结构化设计。内容涵盖提高定价准确性的方差缩减方法,如准蒙特卡罗序列的应用;分析RMBS面临的利率风险、信用风险和模型风险,并提出相应的度量与应对策略;介绍利用动态规划优化CMO分层结构以最大化发行利润的方法。同时总结了RMBS的基本类型、定价流程及市场发展趋势,为投资者和发行人提供全面的决策支持。

quiet的专栏 156

用 SQL Trace 透视 SAP HANA 执行链路:从会话层到内部语句,一次把性能问题抓个现行

摘要:SAP HANA 的 SQL Trace 是性能分析和故障定位的关键工具,它记录会话层所有执行的 SQL 语句。文章解释了 SQL Trace 的工作原理、使用场景和配置方法,包括图形界面和 SQL 命令两种启用方式。重点讨论了存储过程内部语句的捕获问题,指出需要通过设置 internal 参数才能获取过程体中的详细 SQL 语句。文章还提供了实用的排查建议,强调要精准控制 Trace 范围,避免生成过大文件。最后通过真实案例展示了如何利用 SQL Trace 快速定位性能问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1044

Java高并发革命!JDK19新特性——虚拟线程(Virtual Threads)

虚拟线程具有和 Go 语言的 goroutines 和 Erlang 语言的进程类似的实现方式,它们是用户模式(user-mode)线程的一种形式。在过去 Java 中常常使用线程池来进行平台线程的共享堆栈跟踪不提供可用的上下文调试器不能单步执行请求处理逻辑分析器不能将操作的成本与其调用方关联。而虚拟线程既保持与平台的设计兼容,同时又能最佳地利用硬件从而不影响可伸缩性。虚拟线程是由 JDK 而非操作系统提供的线程的轻量级实现虚拟线程是没有绑定到特定操作系统线程的线程。平台线程。

java_beautiful的博客 3867

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java 虚拟线程深度解析:JDK 19 引入的革命性并发模型

Java JDK 19引入的虚拟线程是并发编程的重大革新。虚拟线程作为用户态线程,由JVM调度,相比传统平台线程更轻量,可支持百万级并发。它通过多对一映射复用平台线程,在I/O阻塞时自动挂起释放资源,显著提升CPU利用率。实测显示,5万并发任务下虚拟线程耗时仅174ms,远优于平台线程的5450ms。虚拟线程API与传统线程兼容,只需简单修改即可迁移,特别适合I/O密集型应用,是Java高并发编程的未来方向。

qq_46371374的博客 1323

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JDK19 - synchronized关键字导致的虚拟线程PINNED

在虚拟线程详解这篇文章里面,我们详解了虚拟线程的一个执行原理和底层执行顺序。那么这里我们分享一下一个使用虚拟线程的坑点。关键字对虚拟线程pinned的副作用,我们要考虑到如何兼容和更改,可以使用重入锁进行替代。由于这个关键字我们难以排查完全,我们可以增加参数信息打印pinned发生时候的堆栈信息,助于我们排查,但是这个操作建议只在本地或者测试环境进行。因为他可能会导致你的程序发生死锁。建议测试环境进行灰度测试,保证pinned的情况不再发生的时候,可以再发到生产环境进行灰度。

Zong_0915的博客 2844

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

支持JDK19虚拟线程的web框架,之四:看源码,了解quarkus如何支持虚拟线程

quarkus是如何支持虚拟线程的呢?今天咱们一起来阅读quarkus源码,学习从框架开发视角去添加新特性,除了开阔眼界,也为为自己的设计能力提升增加有效的参考信息

程序员欣宸的博客 1442

科技与狠活?JDK19中的虚拟线程到底什么鬼?

本文给大家介绍了一下JDK 19新推出的虚拟线程,或者叫协程,主要是为了解决在读书操作系统中线程需要依赖内核线程的实现,导致有很多额外开销的问题。通过在Java语言层面引入虚拟线程,通过JVM进行调度管理,从而减少上下文切换的成本。同时我们经过简单的demo测试,发现虚拟线程的执行确实高效了很多。但是使用的时候也需要注意,虚拟线程是守护线程,所以有可能会没等他执行完虚拟机就会shutdown掉。

mxt51220的博客 932

JDK19特性之虚拟线程和结构化并发

在读《深入理解JVM虚拟机》这本书前两章的时候整理了JDK从1.0到最新版本发展史,其中记录了JDK这么多年来演进过程中的一些趣闻及引人注目的一些特性,在调研JDK19新增特性的时候了解到了虚拟线程这个概念,于是对虚拟线程进行学习整理内容如下。虚拟线程(Virtual Threads)就犹如名字一样,并非传统意义上的JAVA线程。传统意义上的JAVA线程(以下称为平台线程)跟操作系统的内核线程是一一映射的关系(如下图所示)。而对于平台线程的创建和销毁所带来的开销是非常大的,所以JAVA采用线程池。

上善若泪 856
上一篇: SpringBean创建的方式有哪些?
下一篇: 如何实现下层函数要让上层函数感知异常
黄金分割律
博客等级 码龄4年 61粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值