
上图中是JDK各个版本的发布历史。大版本JDK21在去年9月份闪亮登场,其中重量级的特性——虚拟线程在这个大版本中正式转正。
本文将详细介绍JDK21的定义、工作原理及其适用场景,并给出使用建议。

虚拟线程定义
线程术语定义
▶ 操作系统线程(OS Thread)
由操作系统管理,是操作系统调度的基本单位。
▶ 平台线程(Platform Thread)
Java.Lang.Thread 类的每个实例,都是一个平台线程,是 Java 对操作系统线程的包装,与操作系统是 1:1 映射。

▶ 虚拟线程(Virtual Thread)
一种在 Java 虚拟机(JVM)中实现的轻量级线程,也被称为用户线程。对应的实例 java.lang.VirtualThread 这个类。
和传统操作系统线程相比,Java 虚拟线程的创建和销毁速度更快,开销更小,可以大量创建,更适合轻量级任务场景。
▶ 载体线程(Carrier Thread)
指真正负责执行虚拟线程中任务的平台线程。一个虚拟线程装载到一个平台线程之后,那么这个平台线程就被称为虚拟线程的载体线程。

⬆ 虚拟线程工作模型
虚拟线程工作原理
虚拟线程(Virtual Thread)它不与特定的操作系统线程相绑定。它在平台线程上运行 Java 代码,但在代码的整个生命周期内不独占平台线程。这意味着许多虚拟线程可以在同一个平台线程上运行他们的 Java 代码。同时虚拟线程的成本很低,虚拟线程的数量可以比平台线程的数量大得多。

适用场景与使用建议
适用场景
-
大量的 IO 阻塞等待任务,例如下游 RPC 调用,DB 查询等。虚拟线程采用协作式调度,线程主动放弃CPU,而不是由操作系统强制切换,这种模型可提高系统的吞吐量。
-
大批量的处理时间较短的计算任务。
使用建议
无需池化虚拟线程:
虚拟线程占用的资源很少,因此可以大量地创建而无须考虑池化,它不需要跟平台线程池一样,平台线程的创建成本比较昂贵,所以通常选择去池化,去做共享,但是池化操作本身会引入额外开销,对于虚拟线程池化反而是得不偿失,使用虚拟线程我们抛弃池化的思维,用时创建,用完就扔。

JDK升级之难
尝试升级
去年本想尝试我司产品HR++人事管理系统升级一事,从8升级至17,但在升级的过程中发现,Mybatis-Plus版本过低,高版本的Mybatis-Plus API接口也做了非常大的改动。在代码层面使用Mybatis-Plus与数据库进行IO交互的场景又不计其数,只能暂时放下。
拥抱新特性

JDK版本更新非常快,从8开始几乎一年一个大版本。新特性更是层出不穷,连垃圾回收器都已经换了两代。但8依旧是最稳定且使用最广泛的版本,Oracle官方至今还在维护。
JDK 21的发布
为Java应用的性能优化带来了新的契机。
在之后的项目中,小编会用JDK21来构建。
如若有新的体验届时再来跟大家分享。
✦✦
由于微信公众号修改了推送规则,
没有加“星标★”的订阅号,
收到的推送只有标题和小图,
而且会慢慢收不到最新的推送。
想要不错过各类讯息,
小伙伴们可以将【乐科科集团】公众号
加个星标❤

你 “在看” 我吗?