当前位置: 首页 > article >正文

JDK17-21特性Virtual-Threads详解

Virtual Threads 详解一、知识概述Virtual Threads(虚拟线程)是 Java 21 引入的重大特性,它是 Project Loom 项目的核心成果。虚拟线程是一种轻量级的线程实现,由 JVM 而非操作系统管理,可以极大地提高并发程序的可扩展性。1.1 传统线程的局限性在虚拟线程出现之前,Java 的线程是与操作系统线程一一对应的:Java Thread (Platform Thread) ←→ OS Thread这种映射方式存在以下问题:资源消耗大:每个 OS 线程占用约 1MB 栈空间创建成本高:创建线程需要系统调用数量受限:一台服务器通常只能创建几千个线程上下文切换开销:OS 级别的线程切换成本高1.2 虚拟线程的解决方案虚拟线程采用 M:N 的调度模型:多个 Virtual Thread (M) ←→ 少量 Carrier Thread (N) ←→ OS Thread (N)优势:轻量级:每个虚拟线程只占用几百字节数量不限:可以创建数百万个虚拟线程高效调度:JVM 级别的调度,切换成本低简化编程:使用传统同步编程模型实现高并发二、知识点详细讲解2.1 虚拟线程基础2.1.1 创建虚拟线程importjava.util.concurrent.Executors;importjava.util.concurrent.ThreadFactory;publicclassVirtualThreadCreation{publicstaticvoidmain(String[]args)throwsException{// 方式1:使用 Thread.startVirtualThread()ThreadvThread1=Thread.startVirtualThread(()-{System.out.println("Hello from virtual thread: "+Thread.currentThread());});vThread1.join();// 方式2:使用 Thread.BuilderThreadvThread2=Thread.ofVirtual().name("my-virtual-thread").unstarted(()-System.out.println("Using Thread.Builder"));vThread2.start();vThread2.join();// 方式3:使用 Executors.newVirtualThreadPerTaskExecutor()try(varexecutor=Executors.newVirtualThreadPerTaskExecutor()){executor.submit(()-System.out.println("From executor"));}// 方式4:使用 ThreadFactoryThreadFactoryfactory=Thread.ofVirtual().factory();ThreadvThread3=factory.newThread(()-{System.out.println("Created by factory");});vThread3.start();vThread3.join();// 判断是否为虚拟线程System.out.println("Is virtual: "+Thread.currentThread().isVirtual());}}2.1.2 虚拟线程与平台线程对比publicclassThreadComparison{publicstaticvoidmain(String[]args){// 平台线程ThreadplatformThread=Thread.ofPlatform().name("platform-thread").unstarted(()-{System.out.println("Platform thread: "+Thread.currentThread());System.out.println("Is virtual: "+Thread.currentThread().isVirtual());});// 虚拟线程ThreadvirtualThread=Thread.ofVirtual().name("virtual-thread").unstarted(()-{System.out.println("Virtual thread: "+Thread.currentThread());System.out.println("Is virtual: "+Thread.currentThread().isVirtual());});platformThread.start();virtualThread.start();// 查看线程属性System.out.println("\n平台线程属性:");System.out.println(" 栈大小: "+platformThread.getStackTrace().length);System.out.println("\n虚拟线程属性:");System.out.println(" 是否虚拟: "+virtualThread.isVirtual());}}2.2 虚拟线程调度2.2.1 调度原理importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;publicclassVirtualThreadScheduling{publicstaticvoidmain(String[]args)throwsException{// 查看载波线程(Carrier Thread)System.out.println("Available processors: "+Runtime.getRuntime().availableProcessors());// 创建多个虚拟线程,观察调度try(ExecutorServiceexecutor=Executors.newVirtualThreadPerTaskExecutor()){for(inti=0;i10;i++){inttaskId=i;executor.submit(()-{StringthreadName=Thread.currentThread().getName();System.out.println("Task "+taskId+" running on: "+threadName);// 模拟阻塞操作try{Thread.sleep(100);}catch(InterruptedExceptione){Thread.currentThread().interrupt();}System.out.println("Task "+taskId+" completed");});}}}}2.2.2 固定载波线程数importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.ThreadFactory;publicclassCustomCarrierThreads{publicstaticvoidmain(String[]args){// 默认情况下,载波线程数等于 CPU 核心数// 可以通过系统属性调整System.setProperty("jdk.virtualThreadScheduler.parallelism","4");System.setProperty("jdk.virtualThreadScheduler.maxPoolSize","8");try(ExecutorServiceexecutor=Executors.newVirtualThreadPerTaskExecutor()){for(inti=0;i20;i++){intid=i;executor.submit(()-{System.out.println("Task "+id+": "+Thread.currentThread());try{Thread.sleep(1000);}catch(InterruptedExceptione){Thread.currentThread().interrupt();}});}}}}2.3 阻塞操作与挂载/卸载2.3.1 阻塞操作的自动挂载importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.concurrent.Executors;publicclassBlockingOperationsDemo{publicstaticvoidmain(String[]args)throwsException{// 启动一个简单的服务器try(ServerSocketserverSocket=newServerSocket(8080);varexecutor=Executors.newVirtualThreadPerTaskExecutor())

相关文章:

JDK17-21特性Virtual-Threads详解

Virtual Threads 详解 一、知识概述 Virtual Threads(虚拟线程)是 Java 21 引入的重大特性,它是 Project Loom 项目的核心成果。虚拟线程是一种轻量级的线程实现,由 JVM 而非操作系统管理,可以极大地提高并发程序的可扩展性。 1.1 传统线程的局限性 在虚拟线程出现之前…...

【紧急避坑】AI开发者必看:Docker Sandbox 4类致命报错正在 silently 毁掉你的模型实验结果!

更多请点击: https://intelliparadigm.com 第一章:Docker Sandbox 运行 AI 代码隔离技术报错解决方法总览 在基于 Docker 构建的 AI 代码沙箱环境中,常见报错多源于资源限制、权限配置、依赖冲突及挂载路径不一致。以下为高频问题的系统性排…...

PvZ Toolkit:内存注入技术与游戏逆向工程的完美融合

PvZ Toolkit:内存注入技术与游戏逆向工程的完美融合 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 当我们回顾经典游戏《植物大战僵尸》时,总会想起那些充满策略性的关卡设…...

040、未来展望:自主智能体、AGI与架构新范式

昨天深夜调一个多智能体协作的仿真环境,日志里反复报“决策循环超时”。查了半天,发现不是计算资源不够,而是几个智能体在互相等待对方的输出,形成了一个死锁环。关掉显示器点烟的时候突然想到:这不就是我们现在搞的AI Agent架构的缩影吗?每个模块都挺聪明,凑在一起却可…...

【C语言嵌入式RTOS开发黄金标准】:2026版官方规范首次解禁,97%工程师尚未掌握的5大硬核约束条件

更多请点击: https://intelliparadigm.com 第一章:2026版嵌入式RTOS C语言开发规范的演进逻辑与合规性纲领 嵌入式实时操作系统(RTOS)在汽车电子、工业控制与AIoT边缘设备中的安全临界性持续提升,推动C语言开发规范从…...

VS Code Copilot Next 真实生产部署失败复盘:3家头部科技公司血泪教训,第2条99%开发者仍在踩坑

更多请点击: https://intelliparadigm.com 第一章:VS Code Copilot Next 真实生产部署失败复盘总述 在某中型 SaaS 产品团队的 CI/CD 流水线升级中,VS Code Copilot Next 被引入作为开发辅助层,计划集成至远程开发容器&#xff0…...

Qwen3.5-2B入门指南:Clear Chat与Export History在团队协作中的妙用

Qwen3.5-2B入门指南:Clear Chat与Export History在团队协作中的妙用 1. 认识Qwen3.5-2B轻量化模型 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型特别适合团队协作场景&#…...

企业如何用客户关系管理系统提升销售业绩?3步实现业绩增长的实战指南

很多企业在销售管理中会遇到这样的困境:客户没少开发,但成交率一直上不去;销售员没少努力,但业绩就是不见增长;团队没少开会,但问题总是反复出现。实际上,这些都是客户关系管理系统可以解决的问…...

驱动基础知识

makefile添加模块编译好.ko文件后 insmod添加模块 ,由于学习使用的是虚拟终端需要使用dmesg 指令显示Kconfig是定义可配置项,让用户选择对应功能,Makefile会根据用户选择的配置项来控制代码的编译行为。驱动三种状态编译进内核,编…...

RS-485故障安全偏置技术演进与工程实践

1. RS-485故障安全偏置技术背景解析在工业现场总线通信领域,RS-485标准已经服役超过30年,却依然是许多工程师的"痛点"。这个看似简单的差分通信协议,在实际部署中常常会遇到一个典型问题:当总线处于空闲状态时&#xff…...

NE2281 1000W PFC芯片,主要应用于boost PFC变换器

1、方案名称:NE2281 1000W PFC芯片,主要应用于boost PFC变换器 2、品牌:星云半导体(NEBULA) 3、描述:NE2281 是一款高性能、多模式工作的 AC/DC控制器,具有高集成度、高效率等特性&#xff0c…...

LFM2.5-1.2B-Instruct一文详解:28T训练预算带来的小模型高泛化能力

LFM2.5-1.2B-Instruct一文详解:28T训练预算带来的小模型高泛化能力 1. 模型概述与核心优势 LFM2.5-1.2B-Instruct是一个参数量仅为1.2B的轻量级指令微调大语言模型,由Liquid AI和Unsloth团队联合开发。这个模型最引人注目的特点是:用28T to…...

vulhub系列-34-Os-ByteSec(超详细)

免责声明:本文记录的是 Os-ByteSec 渗透测试靶机 的解题过程,所有操作均在 本地授权环境 中进行。内容仅供 网络安全学习与防护研究 使用,请勿用于任何非法用途。读者应遵守《网络安全法》及相关法律法规,自觉维护网络空间安全。目…...

手把手教你用readl/writel调试树莓派GPIO(基于Linux/io.h)

手把手教你用readl/writel调试树莓派GPIO(基于Linux/io.h) 树莓派作为一款广受欢迎的嵌入式开发平台,其GPIO控制一直是开发者关注的焦点。不同于常见的用户空间GPIO库(如WiringPi或RPi.GPIO),本文将带你深入…...

LLVMSwift:用Swift原生封装LLVM,实现类型安全的编译器开发

1. 项目概述与核心价值如果你是一个 Swift 开发者,同时对编译原理、程序分析或者高性能计算感兴趣,那么你很可能听说过 LLVM。这个强大的编译器基础设施几乎无处不在,从 Clang 到 Swift 编译器本身,再到各种 JIT 引擎,…...

vulhub系列-33-hacksudo - Thor(超详细)

免责声明:本文记录的是 hacksudo - Thor 渗透测试靶机 的解题过程,所有操作均在 本地授权环境 中进行。内容仅供 网络安全学习与防护研究 使用,请勿用于任何非法用途。读者应遵守《网络安全法》及相关法律法规,自觉维护网络空间安…...

JPEGsnoop深度解析:当你的JPEG图像需要“法医级“诊断时

JPEGsnoop深度解析:当你的JPEG图像需要"法医级"诊断时 【免费下载链接】JPEGsnoop JPEGsnoop: JPEG decoder and detailed analysis 项目地址: https://gitcode.com/gh_mirrors/jp/JPEGsnoop 在数字图像处理的日常工作中,你是否曾遇到过…...

小白技能库:技术新人的场景化学习指南与开源项目实践

1. 项目概述:小白技能库的诞生与价值最近在GitHub上看到一个挺有意思的项目,叫“aptratcn/xiaobai-skills”。光看名字,你大概就能猜到它的定位——“小白技能库”。作为一个在技术社区混迹了十多年的老鸟,我第一眼看到这个项目时…...

Cursor AI 代理 9 秒删除生产数据库:Railway 无作用域令牌与“假备份”如何让灾难成为必然

昨天,一家服务全国租车公司的 SaaS 创业公司 PocketOS 生产环境瞬间归零。 不是黑客入侵,不是配置失误,而是一个运行在 Cursor 里的 Claude Opus 4.6 代理,在处理 staging 环境的凭证问题时,自主决定调用 Railway Grap…...

Git代码分支管理模型TBD++ Flow

现代软件开发过程中要实现高效的团队协作,需要使用代码分支管理工具实现代码的共享、追溯、回滚及维护等功能。目前流行的代码管理工具,包括CVS,SVN,Git,Mercurial等。相比CVS和SVN的集中管理,Git具有非常明显的优势,例如:去中心化的代码管理方式减少了开发者对中心服务…...

潮玩盲盒小程序开发全解析:技术架构、合规风控与运营变现

引言盲盒经济凭借 “未知性 收藏欲” 持续爆发,2024 年国内市场规模突破 500 亿元,微信小程序以低获客成本、高便捷性成为核心阵地。本文从技术选型、核心功能、合规风控到运营变现,全链路拆解盲盒小程序开发逻辑,为开发者提供可…...

基于Transformer的中文文本分类

前言 我在github上发现了一个有意思的项目Chinese-Text-Classification-Pytorch,使用pytorch复现了基于Transformer的中文文本分类。 中文数据集 我从THUCNews中抽取了20万条新闻标题,文本长度在20到30之间。一共10个类别,每类2万条。 以…...

整个 AI 项目从本地 → 部署到服务器

一、整体流程(最清晰版)本地打包镜像 → 上传到服务器 → 服务器加载镜像 → 挂载模型目录 → 启动容器 → 运行成功二、完整部署步骤(照着执行即可)1.本地:把你的 AI 项目打包成 Docker 镜像(cmd->项目根目录下执行…...

第十七届蓝桥杯省赛c++b组题解

蓝桥杯省赛自测&#xff08;CB 组&#xff09; - 洛谷 洛谷自测链接(由于数据原因 真实成绩可能与官方成绩有所出入) 1.青春常数 非常简单的入门题目 一共四年&#xff0c;前两年总和要小于后两年 即xy2026202520242023且x<y算出x的最大值即可(注意&#xff01;x可以为0 所…...

vue2+element-UI上传图片封装

针对上传组件进行封装&#xff0c;在页面直接引用即可&#xff0c;上传到minio文件服务器&#xff1a; 可以预览&#xff0c;重新上传&#xff0c;只读模式&#xff0c;可以传入展示缩略图尺寸&#xff0c;传入上传校验尺寸 <template><div><div v-if"read…...

如何用GHelper轻松掌控华硕笔记本性能:5分钟快速配置终极指南

如何用GHelper轻松掌控华硕笔记本性能&#xff1a;5分钟快速配置终极指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, St…...

盟接之桥®制造业EDI软件:从Forecast到Invoice,打通供应链的“任督二脉”

在全球制造业数字化转型的浪潮中&#xff0c;供应链的协同效率直接决定了企业的竞争力。对于汽车零部件、机械制造、电子电器等行业的制造企业而言&#xff0c;电子数据交换&#xff08;EDI&#xff09;已不再是“锦上添花”的选项&#xff0c;而是进入全球顶级供应链体系的“入…...

YOLO26管道泄漏识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+远程环境部署)

摘要 管道泄漏是石油、化工、城市供水及燃气输送系统中的主要安全隐患&#xff0c;传统人工巡检与基于压力、流量等参数的监测方法存在响应慢、定位难、误报率高等问题。本文基于YOLO26系列目标检测算法&#xff0c;构建了一套端到端的管道泄漏视觉识别检测系统。系统以管道场…...

哔哩下载姬:专业B站视频下载工具,支持8K与批量下载

哔哩下载姬&#xff1a;专业B站视频下载工具&#xff0c;支持8K与批量下载 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印…...

烟台群策电子-FMC_M6678评估板

功能说明本子卡是一款面向国产M6678处理器的FMC转接卡。其提供标准的FMC HPC接口&#xff0c;可实现便捷的模块互联&#xff0c;既可作为国产M6678应用生态的评估平台&#xff0c;又能作为算力扩展节点&#xff0c;有效增强系统的整体处理能力。主要组成子卡实现了M6678的最小系…...