JDK21的虚拟线程是什么?和平台线程什么关系?

news2025/1/24 14:27:44

虚拟线程(Virtual Thread)是 JDK 而不是 OS 实现的轻量级线程(Lightweight Process,LWP),由 JVM 调度。许多虚拟线程共享同一个操作系统线程,虚拟线程的数量可以远大于操作系统线程的数量。

在引入虚拟线程之前,java.lang.Thread 包已经支持所谓的平台线程,也就是没有虚拟线程之前,我们一直使用的线程。JVM 调度程序通过平台线程(载体线程)来管理虚拟线程,一个平台线程可以在不同的时间执行不同的虚拟线程(多个虚拟线程挂载在一个平台线程上),当虚拟线程被阻塞或等待时,平台线程可以切换到执行另一个虚拟线程。

虚拟线程、平台线程和系统内核线程的关系图如下所示(图源:How to Use Java 19 Virtual Threads):

虚拟线程、平台线程和系统内核线程的关系

关于平台线程和系统内核线程的对应关系多提一点:在 Windows 和 Linux 等主流操作系统中,Java 线程采用的是一对一的线程模型,也就是一个平台线程对应一个系统内核线程。Solaris 系统是一个特例,HotSpot VM 在 Solaris 上支持多对多和一对一。具体可以参考 R 大的回答: JVM 中的线程模型是用户级的么?。

相比较于平台线程来说,虚拟线程是廉价且轻量级的,使用完后立即被销毁,因此它们不需要被重用或池化,每个任务可以有自己专属的虚拟线程来运行。虚拟线程暂停和恢复来实现线程之间的切换,避免了上下文切换的额外耗费,兼顾了多线程的优点,简化了高并发程序的复杂,可以有效减少编写、维护和观察高吞吐量并发应用程序的工作量。

虚拟线程在其他多线程语言中已经被证实是十分有用的,比如 Go 中的 Goroutine、Erlang 中的进程。

知乎有一个关于 Java 19 虚拟线程的讨论,感兴趣的可以去看看:https://www.zhihu.com/question/536743167 。

Java 虚拟线程的详细解读和原理可以看下面这几篇文章:

  • 虚拟线程极简入门(推荐)
  • Java19 正式 GA!看虚拟线程如何大幅提高系统吞吐量
  • 虚拟线程 - VirtualThread 源码透视

虚拟线程在 Java 19 中进行了第一次预览,由JEP 425提出。JDK 20 中是第二次预览,做了一些细微变化,这里就不细提了。

最后,我们来看一下四种创建虚拟线程的方法:

// 1、通过 Thread.ofVirtual() 创建
Runnable fn = () -> {
  // your code here
};

Thread thread = Thread.ofVirtual(fn)
                      .start();

// 2、通过 Thread.startVirtualThread() 、创建
Thread thread = Thread.startVirtualThread(() -> {
  // your code here
});

// 3、通过 Executors.newVirtualThreadPerTaskExecutor() 创建
var executorService = Executors.newVirtualThreadPerTaskExecutor();

executorService.submit(() -> {
  // your code here
});

class CustomThread implements Runnable {
  @Override
  public void run() {
    System.out.println("CustomThread run");
  }
}

//4、通过 ThreadFactory 创建
CustomThread customThread = new CustomThread();
// 获取线程工厂类
ThreadFactory factory = Thread.ofVirtual().factory();
// 创建虚拟线程
Thread thread = factory.newThread(customThread);
// 启动线程
thread.start(); 

通过上述列举的 4 种创建虚拟线程的方式可以看出,官方为了降低虚拟线程的门槛,尽力复用原有的 Thread 线程类,这样可以平滑的过渡到虚拟线程的使用。

本文已收录今 JavaGuide (「Java学习 + 面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1101775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧公厕管理系统:让公共厕所管理变得更高效。

公共厕所的管理是城市环境卫生的重要组成部分,而传统的公厕管理方式已经无法满足日益增长的需求。为了提高公厕的管理效率,降低运营成本,智慧公厕管理系统应运而生。本文将以智慧公厕领先厂家广州中期科技有限公司,大量精品案例现…

java运维部署操作手册

关闭防火墙 不管是windows还是linux,首先必须关闭防火墙。 # linux添加8080端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent#删除80端口 firewall-cmd --zonepublic --remove-port8080/tcp --permanent# 刷新使端口立即生效 firewall-cmd --reloa…

成集云 | 1药城对接英克ERP | 解决方案

方案介绍 1药城是中国一家知名的互联网医药零售平台,提供在线药品购买及健康服务。1药城致力于为用户提供方便、安全、优质的购药体验,同时与各大医疗机构合作,为用户提供在线挂号、预约就诊等服务。 英克ERP系统是由英克公司开发的企业资源…

uniapp(uncloud) 使用生态开发接口详情3(新增产品分类,产品列表,新闻列表)

我的想法是有产品分类,产品列表,新闻咨询,新闻列表 项目中, uniCloud > database 目录下新建 sy_product_nav.schema.json // 代码如下 {"bsonType": "object","required": ["classname"],"permission": {"read&…

瓷器文玩经营商城小程序的作用是什么

瓷器文玩商品受到不少人喜欢,无论是高价值物品还是低价饰品,都有较高需求,然而随着线下流量匮乏及线上互联网发展,传统瓷器文玩品牌店也面临着一些难题。 私域是近几年的热词,也有不少品牌基于私域取得了成功&#xf…

uniapp:使用subNVue原生子窗体在map上层添加自定义组件

我们想要在地图上层添加自定义组件,比如一个数据提示框,点一下会展开,再点一下收起,在h5段显示正常,但是到app端真机测试发现组件显示不出来,这是因为map是内置原生组件,层级最高,自…

流程挖掘助力企业数字化转型:CBPM 2023圆桌论坛圆满召开

9月23日至24日,由山东科技大学、山东大学、中国石油大学和中国海洋大学联合承办,RPA中国、山东理工大学、青岛大学协办的第十三届中国业务过程管理大会(CBPM 2023)成功举办! 本次会议共有100余位来自国内外高校和科研…

《低代码指南》——AI低代码维格云架构视图怎么用?

架构视图是一个展示信息层级关系的视图,轻轻拖拽卡片,就能搭建精巧缜密的企业组织架构视图、实现信息结构化。 利用好架构视图,可以很好地解决以下场景: 展示企业/团队的组织关系 可视化管理产品开发架构 统筹全员 OKR 完成情况 架构视图的基础知识​ 架构视图分为以下几个…

深度学习入门(一)之感知机

文章目录 前言什么是感知机简单的逻辑电路与门与非门和或门 感知机的实现简单的实现导入权重和偏置 感知机的局限性异或门线性和非线性 多层感知机已有门电路的组合异或门的实现 代码合集 前言 感知机是由美国学者1957年提出来,作为神经网络的起源算法。因此学习感…

基于jsp+ssm+springboot的高校校园点餐系统【毕业论文+源码】

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

非技术背景项目经理如何发展?

非技术背景的项目经理在现代企业中扮演着重要的角色,他们负责协调和管理项目的各个方面,确保项目按时、按预算和按质量要求完成。对于没有技术背景的项目经理来说,他们需要通过一些特定的方法和策略来发展自己的职业生涯。 首先,…

七大排序的顶级理解(近万字详解)

目录 1. 排序的概念及引用 2.常见的排序算法 2.1直接插入排序 2.2希尔排序( 缩小增量排序 ) 2.3选择排序 2.4堆排序 2.5冒泡排序 2.6快速排序 2.6.1Hoare版 2.6.2挖坑法 2.6.3前后指针 2.7快速排序优化 2.7.1递归优化 2.7.2非递归实现快速排序 2.8归并排序 …

k8s-19 资源限制与监控

资源限制 上传镜像 limitrange 创建pod 自动添加限制 limitrage 是给所有的pod 都加range 自定义限制的pod也需要在limitrange定义的区间内 资源限制 创建的ResourceQuota对象将在default名字空间中添力头下限制:每个容器必须设置内存请求(memory request),内存限…

苹果手机视频误删怎么恢复?这3个方法分享给大家!

在手机相册中,除了照片,其余占据空间最多的便是视频了。视频和照片一样,都是我们用来记录生活的一种方式。在这个盛行短视频的时代,越来越多小伙伴喜欢在各个平台分享自己的生活。 对于他们或者是一些职业博主来说,视…

模拟IIC通讯协议(stm32)(硬件iic后面在补)

一、IIC基础知识总结。 (1)IIC通讯需要两条线就可以,SCL、SDA。 (2)IIC的数据传输的速率,不同的ic是不同的,根据电平维持的延时函数的时间来确定IIC数据传输的速率. (3)I…

16603/16604系列噪声源

仪器仪表苏州新利通 16603/16604系列噪声源 16603/16604 series noise sources 噪声源是一种能产生随机连续频谱信号的装置 国产思仪噪声源 01 产品综述 噪声源是一种能产生随机连续频谱信号的装置,良好的噪声源应在规定的频带内具有稳定的输出噪声功率和均匀的功…

QT10_16

X-mind #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->resize(536,412);this->setWindowTitle(" 坤坤之家");this->setWindowIcon(QIcon("D:/Ubuntushare/preview.gif"));this->setWindowFlag…

工业机器视觉系统构成及功能

工业机器视觉系统构成及功能 工业机器视觉系统由光源、光学传感器、图像采集设备、图像处理设备、机器视觉软件、辅助传感器、控制单元和执行机构等组件构成。 光源提供光线以辅助图像获取。 光学传感器将外部场景转换为电信号。 图像采集设备将信号转换为图像数据&#xf…

F. Minimum Maximum Distance Codeforces Round 903 (Div. 3)

Problem - F - Codeforces 题目大意&#xff1a;有一棵n个点的树&#xff0c;其中有k个标记点&#xff0c;令点i到所有标记点的最远距离为fi&#xff0c;问所有点中fi的最小值是多少 1<k<n<2e5 思路&#xff1a;我们首先考虑取得最小值的点在哪&#xff0c;我们假设…

MatrixOne Logtail 设计解析

Logtail 是 CN&#xff08;Computation Node&#xff09;与 TN&#xff08;Transaction Node&#xff09;之间的一种日志同步协议&#xff0c;是 CN 和 TN 协同工作的基础。本文将介绍 logtail 协议的基本定位&#xff0c;协议内容和产生过程&#xff0c;也会提及一些遇到的挑战…