Java 中的虚拟线程,也叫做协程或“轻量级线程”,它诞生于 JDK 19(预览 API),正式发布于 JDK 21,它是一种在 Java 虚拟机(JVM)层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此它可以减少上下文切换所带来的性能开销。
操作系统线程、普通线程(Java 线程)和虚拟线程的关系如下:
图片
虚拟线程的创建方式,主要有以下 4 种:
具体示例如下。
创建虚拟线程,并直接启动执行任务:
// 创建并启动虚拟线程Thread.startVirtualThread(() -> { System.out.println("Do virtual thread.");});
只创建虚拟线程,但不直接启动:
// 创建虚拟线程Thread vt = Thread.ofVirtual().unstarted(()->{ System.out.println("Do virtual thread.");});// 运行虚拟线程vt.start();
先创建虚拟线程工厂,然后再使用工厂创建虚拟线程,之后再调用 start() 方法进行执行:
// 创建虚拟线程工厂ThreadFactory tf = Thread.ofVirtual().factory();// 创建虚拟线程Thread vt = tf.newThread(()->{ System.out.println("Do virtual thread.");});// 运行虚拟线程vt.start();
使用线程池的方式创建虚拟线程:
// 创建一个支持虚拟线程的线程池ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();executor.submit(()->{ System.out.println("Do virtual thread.");});
虚拟线程和普通线程的区别主要体现在以下几点:
图片
线程是轻量级的进程,而虚拟线程则是轻量级的线程,虚拟线程是 JVM 层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此使用它可以减少线程上下文切换所带来的性能开销。它和普通线程的线程类型也不同,普通线程是默认是用户线程类型,而虚拟线程则是守护线程(而且不能被修改)。
本文链接:http://www.28at.com/showinfo-26-50757-0.html面试官:什么是虚拟线程?为什么要有虚拟线程?
声明:本网页内容旨在传播知识,不代表本站观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。