JDK19虚拟线程

JDK19引入了虚拟线程(又称协程),以减轻操作系统线程的开销。虚拟线程与操作系统线程的比例可达到1:N,由JVM高效调度,减少上下文切换成本。尽管能大量创建,但虚拟线程是守护线程,可能在程序结束前未执行完毕。这一改变旨在提升多线程应用的性能和效率。

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

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

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

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

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

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

### JDK 19虚拟线程的使用 #### 创建和启动虚拟线程JDK 19 中,可以通过 `Thread.startVirtualThread` 方法来创建并立即启动一个新的虚拟线程。此方法接受一个实现了 `Runnable` 接口的对象作为参数,并返回代表该虚拟线程的 `Thread` 对象[^3]。 ```java public class VirtualThreadExample { public static void main(String[] args) throws InterruptedException { Thread thread = Thread.startVirtualThread(() -> { System.out.println("执行任务:" + Thread.currentThread().getName()); }); // 主线程等待一段时间以确保虚拟线程完成其工作 Thread.sleep(100); } } ``` 这段代码展示了如何利用虚拟线程简化并发程序的设计。当调用 `startVirtualThread()` 方法时,会自动创建并运行新的虚拟线程去执行传入的任务逻辑,在这里就是打印当前线程名称的操作。 #### 处理 I/O 操作和其他阻塞操作 对于涉及网络请求或其他可能引起长时间等待的情况,建议采用异步 API 或者配合其他机制如 completableFuture 来处理这些场景下的阻塞行为。这样可以充分利用多核 CPU 的计算能力而不必担心因过多的传统线程而带来的性能瓶颈问题[^2]。 例如: ```java import java.util.concurrent.CompletableFuture; public class AsyncIOWithVirtualThreads { private static CompletableFuture<Void> performAsyncOperation() { return CompletableFuture.runAsync(() -> Thread.startVirtualThread(() -> { try { // Simulate an IO operation that takes time. Thread.sleep(5_000); System.out.println("模拟I/O操作已完成"); } catch (InterruptedException e) { throw new RuntimeException(e); } }) ); } public static void main(String[] args) throws Exception { var future = performAsyncOperation(); future.join(); // Wait for the async operation to complete. } } ``` 在这个例子中,通过结合 `CompletableFuture` 和虚拟线程,可以在不阻碍主线程的情况下发起耗时较长的工作流程,进而提高整个系统的响应速度与吞吐量。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值