【java】jdk 19 虚拟线程 简介


在这里插入图片描述

1.概述

影响最深远的Java 19更新之一是虚拟线程的引入。虛拟线程是Project Loom的一部分,在Java 19中可以作为Preview使用。

本章是:【java】java 协程 的补充,虚拟线程也叫协程。

1.1 为什么需要虛拟线程?

理论上来说,我们的程序可以创建出非常多的子线程一起并发执行的,可是基于CPU时间片轮转调度的机制,不可能所有的线程都可以同时被调度执行,CPU需要根据线程的优先级赋予不同的时间片。

在这里插入图片描述
我们在开发的时候会遇到计算密集型与IO密集型两种系统。

在这里插入图片描述
但是如果线程太多会可能并不会提高性能,反而会导致性能下降,因为cpu在不停的调度线程。

对于需

### 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
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值