尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

JDK 21落地实操指南:下载、配置与虚拟线程验证

JDK 21落地实操指南:下载、配置与虚拟线程验证 1. JDK 21不是“升级包”而是Java生态的一次关键分水岭JDK 21在2023年9月正式发布但它真正进入企业开发主流视野、被大量新项目默认采用恰恰是从2024年下半年开始加速的。到2025年8月这个时间点它已不再是“尝鲜版”而是事实上的生产环境标准——Spring Boot 3.2、Quarkus 3.0、Micrometer 1.12等主流框架全部要求JDK 21作为最低运行环境。很多人看到标题里写“2025.8.2”第一反应是“这版本是不是过时了”其实恰恰相反这个日期不是指JDK 21的发布时间而是指你今天动手配置时最该参考的实操基准线——因为截至此时OpenJDK官方镜像站、各大Linux发行版仓库、IDE默认SDK列表、CI/CD流水线模板均已将JDK 21列为稳定支持版本而JDK 22虽已发布但尚未通过大规模生产验证JDK 23更处于早期预览阶段。所以你现在装JDK 21不是在用旧版本而是在踩准当前最稳、最兼容、文档最全、社区支持最及时的那条线。我带过三个不同行业的Java团队从金融后台到物联网平台再到AI工程化服务2024年Q3起所有新立项项目强制使用JDK 21。原因很实在虚拟线程Virtual Threads让高并发Web服务的线程管理成本直降70%以上未命名变量var在Lambda和Stream链式调用中大幅减少样板代码模式匹配Pattern Matching让JSON解析、DTO转换这类重复逻辑的可读性提升一倍不止。这些不是PPT里的特性而是每天写代码时真正在用、能立刻感知效率提升的工具。更重要的是JDK 21是继JDK 8之后第二个长期支持版本LTS官方承诺提供至少8年的安全更新与错误修复——这意味着你今天装的这个JDK至少能陪你跑完一个完整的产品生命周期不用半年就面临迁移焦虑。下载和安装本身不难难的是装对、配稳、用准。很多人卡在“java -version能显示但IDE报找不到SDK”、“mvn compile失败说Java版本不匹配”、“Docker构建时提示Unsupported class file major version”这些问题90%都出在三个地方一是下了OpenJDK却误以为是Oracle JDK结果许可证策略导致CI失败二是Windows下PATH里混入了旧版JDK路径系统优先加载了JDK 8三是Mac上用Homebrew装完没执行sudo ln -s软链接导致终端和GUI应用读取不同JDK。这些坑我全踩过也帮客户现场排查过二十多次。这篇内容不讲“点击下一步”只讲为什么这么选、哪里容易错、怎么一眼定位问题——就像当年师傅手把手教我配环境变量那样把每一步背后的逻辑掰开揉碎。适合谁看如果你是刚学Java的学生这篇能让你避开网上零散教程里互相矛盾的配置步骤如果你是转岗过来的Python或前端开发者这篇会告诉你Java环境和Python virtualenv、Node.js nvm的本质区别在哪如果你是运维或DevOps工程师这篇会明确告诉你容器镜像里该用哪个基础镜像、如何验证JDK签名、怎样做多版本共存隔离。一句话这不是一份安装说明书而是一份JDK 21落地实操地图——标好了起点、岔路口、陷阱区和补给站。2. 下载环节别再盲目搜“jdk21下载”先搞清三件事2.1 你到底需要哪个“JDK 21”OpenJDK、Oracle JDK、Amazon Corretto、Azul Zulu……它们不是同一款软件的多个下载链接而是不同厂商基于同一份OpenJDK源码做的“发行版”就像Ubuntu、CentOS、Debian都是Linux但包管理、默认服务、安全策略完全不同。选错发行版轻则编译报错重则违反企业合规红线。OpenJDK官方二进制包adoptium.net这是目前最推荐的首选。Adoptium项目由Eclipse基金会主导背后是Red Hat、IBM、Microsoft等大厂共同维护所有构建都经过TCKTechnology Compatibility Kit认证确保100%兼容Java SE规范。它的优势在于完全开源免费、更新及时JDK 21.0.4于2025年7月22日发布Adoptium当天同步上线、提供x64/ARM64/macOS/Windows/Linux全平台支持、每个版本都附带SHA256校验值和GPG签名。我所在团队所有CI服务器、测试机、开发机统一用Adoptium三年来没出现过一次因JDK本身导致的兼容性问题。Oracle JDKOracle官网提供的版本。它和OpenJDK源码基本一致但包含一些Oracle专有优化如Java Flight Recorder高级分析功能且商业用途需付费订阅个人学习、开发测试免费。问题在于Oracle JDK的免费许可条款极其复杂比如“允许在生产环境部署但不得用于提供云服务”这种限制很多初创公司法务根本看不懂最后干脆绕开。另外Oracle JDK的Windows安装包默认会修改系统PATH并注册为默认JDK如果机器上已有其他JDK极易引发冲突——这是我见过最多的“装完JDK 21反而连不上MySQL”的原因。Amazon Corretto / Azul ZuluAWS和Azul公司提供的发行版主打云原生场景优化如Corretto内置JFR性能分析器、Zulu支持Windows Server Core容器镜像。适合已经在用AWS EKS或Azure Kubernetes Service的团队但对本地开发意义不大。特别提醒Zulu的Windows MSI安装包有个隐藏选项叫“Set JAVA_HOME”默认勾选一旦勾选它会强行覆盖你原有的JAVA_HOME环境变量且不提示——我帮客户救火时发现他们上周刚装的Zulu结果今天Maven突然报错查了半天才发现JAVA_HOME被改成C:\Program Files\Zulu\zulu-21而项目里.mvn/jvm.config硬编码指向C:\dev\jdk-21。提示别信任何第三方网站提供的“JDK 21绿色免安装版”。网上搜到的所谓“jdk21 免安装版本”99%是把Adoptium压缩包解压后改个名字再打包成exe自解压文件。这种包最大的风险是它可能悄悄注入恶意脚本比如静默启动挖矿进程、篡改hosts文件劫持maven中央仓库、甚至替换jre/bin/java.exe植入后门。去年我们安全审计发现某外包团队交付的“免安装JDK包”里java.exe被替换成一个伪装成Java启动器的PowerShell脚本每执行一次就向境外IP发送一次设备信息。记住JDK是整个Java生态的地基地基必须从源头可信渠道获取。2.2 下载前必做的三步验证确认操作系统架构别光看“Windows”就下x64安装包。打开命令行执行wmic os get osarchitectureWindows或uname -mmacOS/Linux。如果返回ARM64或aarch64你必须下ARM64版本。我见过太多人给M1/M2 Mac下x64 JDK结果IntelliJ IDEA启动直接报no suitable image found——因为x64二进制无法在ARM芯片上原生运行必须靠Rosetta 2转译性能损失30%以上且部分JNI库根本无法加载。核对目标JDK版本号JDK 21有多个更新版本如21.0.1、21.0.2、21.0.3、21.0.4。截至2025年8月2日最新稳定版是21.0.42025年7月发布。这个版本修复了一个关键漏洞CVE-2025-2345该漏洞允许恶意序列化数据触发远程代码执行。如果你下的是21.0.1虽然功能正常但存在严重安全隐患。Adoptium官网每个版本页面都明确标注发布日期和安全公告链接务必点进去看一眼。校验下载文件完整性Adoptium提供SHA256哈希值和GPG签名。以Windows x64为例下载完Eclipse Temurin JDK 21.0.47 (x64)后不要急着双击安装。打开PowerShell执行Get-FileHash .\OpenJDK21U-jdk_x64_windows_hotspot_21.0.4_7.zip -Algorithm SHA256将输出的哈希值与官网页面上的SHA256值逐字符比对。差一个字母说明文件在传输过程中损坏或被篡改。这一步耗时10秒但能避免后续数小时的诡异问题排查——比如jar包解压失败、class文件读取异常根源可能就是zip包本身坏了。2.3 各平台下载实操速查表平台推荐来源下载链接2025.8.2有效文件名特征注意事项Windows x64adoptium.nethttps://adoptium.net/temurin/releases/?version21OpenJDK21U-jdk_x64_windows_hotspot_21.0.4_7.zip选zip包而非msi避免自动修改PATH解压到无空格路径如C:\dev\jdk-21macOS ARM64 (M1/M2/M3)adoptium.nethttps://adoptium.net/temurin/releases/?version21osmacarchaarch64OpenJDK21U-jdk_aarch64_mac_hotspot_21.0.4_7.tar.gz解压后需手动创建软链接sudo ln -s /Users/yourname/Downloads/jdk-21.0.47/Contents/Home /Library/Java/JavaVirtualMachines/jdk-21Ubuntu 24.04 LTS官方apt仓库sudo apt update sudo apt install openjdk-21-jdk系统包管理器自动处理不要手动下载deb包安装apt会自动配置JAVA_HOME和PATHCentOS Stream 9dnf仓库sudo dnf install java-21-openjdk-devel包名含openjdk-devel安装后执行sudo alternatives --config java选择默认版本注意Linux发行版的包管理器安装看似简单但有个隐藏陷阱——它通常把JDK装在/usr/lib/jvm/下而很多Java项目尤其是Gradle构建脚本默认期望JDK在/opt/java/或$HOME/.sdkman/candidates/java/。如果项目里写了org.gradle.java.home/opt/java/jdk-21而你用apt装在/usr/lib/jvm/java-21-openjdk-amd64Gradle就会报错。解决方案有两个要么改项目配置要么用sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-21-openjdk-amd64/bin/java 1注册软链接。3. 安装与环境变量配置PATH、JAVA_HOME、IDE三者必须咬合3.1 Windows平台解压即用但PATH配置是最大雷区JDK 21在Windows上没有传统意义上的“安装程序”它本质是一个绿色解压包。你下载的是zip文件解压后得到一个jdk-21.0.47文件夹里面包含bin、lib、jre等子目录。真正的“安装”动作就是把这个文件夹放到一个稳定路径并让系统知道它的位置。第一步解压到合理路径绝对不要解压到C:\Program Files\或C:\Program Files (x86)\。原因有二一是这些路径含空格很多老Java工具如Ant、某些Maven插件无法正确解析含空格的路径二是Windows权限机制可能导致bin目录下的java.exe被UAC拦截。我建议的路径是C:\dev\jdk-21。dev文件夹是你自己创建的全程拥有完全控制权限路径简洁无空格符合Java生态多年形成的约定俗成。第二步配置JAVA_HOME右键“此电脑”→“属性”→“高级系统设置”→“环境变量”。在“系统变量”区域点击“新建”变量名JAVA_HOME变量值C:\dev\jdk-21注意这里填的是JDK根目录不是C:\dev\jdk-21\bin关键原理JAVA_HOME是Java生态的“锚点”。Maven、Gradle、Tomcat、Spring Boot DevTools等所有工具都通过读取JAVA_HOME来定位lib/tools.jar、jre/lib/rt.jar等核心类库。如果填错比如填成C:\dev\jdk-21\bin那么Maven会去C:\dev\jdk-21\bin\lib找tools.jar自然找不到报错Error: Could not find or load main class org.apache.maven.cli.MavenCli。第三步配置PATH仍在“系统变量”里找到Path变量点击“编辑”→“新建”添加%JAVA_HOME%\bin这里必须用%JAVA_HOME%\bin而不是直接写死C:\dev\jdk-21\bin。为什么因为当你未来升级到JDK 22时只需修改JAVA_HOME的值PATH会自动生效无需改动。这是运维友好性的基本体现。致命陷阱排查很多人配置完命令行输入java -version显示正常但IDEA或VS Code里还是报错。这时打开命令行执行echo %JAVA_HOME% where java如果echo %JAVA_HOME%输出空说明JAVA_HOME没生效常见于只在用户变量里配置没在系统变量里配如果where java返回两个路径比如C:\Program Files\Java\jdk-17\bin\java.exe和C:\dev\jdk-21\bin\java.exe说明PATH里有旧JDK残留必须删掉旧路径。Windows PATH是按顺序查找的第一个匹配的java.exe会被执行哪怕你JAVA_HOME指向JDK 21系统仍可能调用JDK 17。3.2 macOS平台Homebrew便捷但软链接才是灵魂macOS用户常陷入一个误区觉得Homebrew装JDK最省事brew install openjdk21一行搞定。确实便捷但Homebrew默认把JDK装在/opt/homebrew/opt/openjdk21/libexec/openjdk.jdk而macOS的Java运行时环境JRE机制要求JDK必须放在/Library/Java/JavaVirtualMachines/目录下且该目录下的每个子目录必须是一个完整的.jdk包结构含Contents/Home。Homebrew装的路径不符合这个规范导致部分GUI应用如IntelliJ IDEA、Eclipse无法识别。正确做法推荐从Adoptium下载tar.gz包解压到~/Downloads/jdk-21.0.47。打开终端执行sudo mkdir -p /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home sudo cp -r ~/Downloads/jdk-21.0.47/* /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/创建软链接关键sudo ln -s /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk-21这样做的好处是/Library/Java/JavaVirtualMachines/是macOS Java标准发现路径所有应用都会扫描这里软链接jdk-21让路径更简洁且未来升级时只需改链接目标不用改所有配置。环境变量配置macOS Catalina及以后默认shell是zsh所以编辑~/.zshrcexport JAVA_HOME$(/usr/libexec/java_home -v 21) export PATH$JAVA_HOME/bin:$PATH/usr/libexec/java_home -v 21是macOS原生命令它会自动扫描/Library/Java/JavaVirtualMachines/下所有JDK返回匹配21.x的最高版本路径。比硬编码路径更可靠。实操心得我在M2 Mac上试过Homebrew装JDK 21然后用/usr/libexec/java_home -v 21查到的路径是/opt/homebrew/Cellar/openjdk21/21.0.4/libexec/openjdk.jdk/Contents/Home但IntelliJ IDEA的SDK配置界面里这个路径根本不出现在“Add JDK”弹窗的自动扫描列表中。只有把JDK复制到/Library/Java/JavaVirtualMachines/并建立软链接后IDE才把它识别为合法JDK。这印证了一点macOS的Java生态遵循的是Apple定义的JVM规范不是Homebrew的包管理规范。3.3 Linux平台包管理器 vs 手动解压选哪种Ubuntu/Debian系用aptRHEL/CentOS系用dnf或yum这是最省心的方式。但要注意两点包名差异Ubuntu的包叫openjdk-21-jdk而CentOS的包叫java-21-openjdk-devel。“devel”后缀意味着它包含javac编译器和javadoc等开发工具而不仅仅是运行时。如果你只装java-21-openjdk无develjavac命令会报错“command not found”。JAVA_HOME自动配置apt安装后JAVA_HOME通常设为/usr/lib/jvm/java-21-openjdk-amd64x64或/usr/lib/jvm/java-21-openjdk-aarch64ARM64。你可以通过sudo update-java-alternatives -l查看所有已注册JDK并用sudo update-java-alternatives -s java-1.21.0-openjdk-amd64切换默认版本。手动解压方案适合定制化需求有些企业要求JDK必须放在/opt/java/且版本号精确到build号如jdk-21.0.47。这时就需手动操作# 下载zip包解压到/opt/java/ sudo unzip OpenJDK21U-jdk_x64_linux_hotspot_21.0.4_7.zip -d /opt/java/ sudo chown -R root:root /opt/java/jdk-21.0.47 sudo ln -s /opt/java/jdk-21.0.47 /opt/java/jdk-21 # 配置全局环境变量 echo export JAVA_HOME/opt/java/jdk-21 | sudo tee -a /etc/profile.d/java.sh echo export PATH$JAVA_HOME/bin:$PATH | sudo tee -a /etc/profile.d/java.sh sudo chmod x /etc/profile.d/java.sh source /etc/profile.d/java.sh这样做的好处是路径统一、版本清晰、便于Ansible等自动化工具管理。缺点是每次升级都要手动操作不如包管理器一键更新。4. 验证与故障排查五步诊断法精准定位环境问题4.1 基础验证命令行三连问配置完环境变量别急着开IDE先在终端里执行以下三步java -version确认JDK 21是否被正确加载。输出应类似openjdk version 21.0.4 2025-07-16 OpenJDK Runtime Environment Temurin-21.0.47 (build 21.0.47) OpenJDK 64-Bit Server VM Temurin-21.0.47 (build 21.0.47, mixed mode)注意看第二行的Temurin字样这是Adoptium的标识第三行的mixed mode表示JVM同时支持解释执行和JIT编译是正常状态。javac -version确认Java编译器可用。输出应与java -version一致。如果报错command not found说明PATH没包含%JAVA_HOME%\binWindows或$JAVA_HOME/binmacOS/Linux。echo $JAVA_HOMEmacOS/Linux或echo %JAVA_HOME%Windows确认环境变量值正确。如果为空说明变量没生效或拼写错误比如写成JAVA_HOMEE。提示这三步必须在同一个终端窗口执行。Windows用户常犯的错误是在PowerShell里配置了环境变量却在CMD里验证——因为PowerShell和CMD的环境变量是隔离的。macOS用户则要注意.zshrc配置只对新打开的终端生效已打开的终端需执行source ~/.zshrc。4.2 IDE集成验证IntelliJ IDEA与VS Code的典型问题IntelliJ IDEA打开File → Project Structure → Project检查Project SDK是否为JDK 21。如果列表为空点击New → JDK导航到C:\dev\jdk-21Windows或/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/HomemacOS。关键细节IDEA的Project language level必须与JDK版本匹配。JDK 21对应语言级别是21不能选17或22否则新语法如record模式匹配会标红。常见问题IDEA启动慢、卡在“Loading project”界面。这往往是因为idea64.exe.vmoptions里设置了-XX:MaxRAMPercentage75.0而JDK 21的G1 GC对内存参数更敏感。解决方案在Help → Edit Custom VM Options里将MaxRAMPercentage改为50.0重启IDEA。VS Code Extension Pack for Java按CtrlShiftPWindows或CmdShiftPmacOS输入Java: Configure Java Runtime选择JDK 21路径。如果Java扩展报错The Java runtime environment (JRE) is not installed说明VS Code没读取到系统环境变量。解决方案关闭VS Code用命令行启动它——code --disable-gpuWindows或open -a Visual Studio CodemacOS这样它会继承终端的环境变量。4.3 构建工具验证Maven与Gradle的版本对齐JDK版本和构建工具版本必须协同。JDK 21要求Maven ≥ 3.9.03.8.x不支持JDK 21的模块化特性Gradle ≥ 8.48.3及以下对虚拟线程支持不完善Maven验证在项目根目录执行mvn -v输出应包含Apache Maven 3.9.2 (Red Hat Maven 3.9.2) Maven home: /opt/maven Java version: 21.0.4, vendor: Eclipse Adoptium, runtime: /opt/java/jdk-21.0.47如果Java version显示旧版本说明Maven没读取到你的JAVA_HOME。检查mvn脚本头部是否有JAVA_HOME硬编码或者在~/.mavenrc里显式设置export JAVA_HOME/opt/java/jdk-21。Gradle验证执行gradle -v重点关注JVM行JVM: 21.0.4 (Eclipse Adoptium 21.0.47)如果项目里用了gradle wrapper./gradlew它会忽略系统JAVA_HOME而读取gradle/wrapper/gradle-wrapper.properties里的distributionUrl。确保该URL指向Gradle 8.4例如distributionUrlhttps\://services.gradle.org/distributions/gradle-8.5-bin.zip4.4 Docker与CI/CD验证容器镜像里的JDK陷阱很多团队在本地开发一切正常一上Docker就报错。根本原因是Docker镜像里的JDK和本地不一致。基础镜像选择eclipse-temurin:21-jre-jammyUbuntu 22.04eclipse-temurin:21-jdk-jammy含javac适合构建阶段eclipse-temurin:21-jre-focalUbuntu 20.04兼容性更好绝对不要用openjdk:21-jre这是Docker Hub官方镜像但更新滞后且不保证TCK认证。Dockerfile关键写法FROM eclipse-temurin:21-jdk-jammy # 显式声明JAVA_HOME避免依赖镜像默认值 ENV JAVA_HOME/opt/java/openjdk ENV PATH$JAVA_HOME/bin:$PATH # 验证安装 RUN java -version javac -version COPY . /app WORKDIR /app RUN ./gradlew build --no-daemon注意--no-daemon参数很重要因为Docker容器默认无systemdGradle daemon可能无法启动导致构建卡住。GitHub Actions CI验证在.github/workflows/build.yml里指定JDK版本steps: - uses: actions/setup-javav4 with: java-version: 21 distribution: temurindistribution: temurin确保用Adoptium而不是默认的zulu或microsoft。4.5 常见问题速查表与独家避坑技巧问题现象根本原因快速解决我的避坑技巧java -version显示JDK 21但mvn compile报错Unsupported class file major version 65Maven用的是旧JDK如JDK 17编译而项目pom.xml里maven-compiler-plugin配置了source21/source检查mvn -v输出的Java版本在pom.xml里显式指定插件版本plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.11.0/version/pluginMaven的JAVA_HOME优先级高于系统变量。在mvn脚本开头加echo $JAVA_HOME调试或在CI里用envIntelliJ IDEA里JDK 21显示为“Invalid JDK path”macOS上JDK没放在/Library/Java/JavaVirtualMachines/或软链接损坏重新执行sudo ln -s ...命令用ls -la /Library/Java/JavaVirtualMachines/确认链接指向正确创建一个check-jdk.sh脚本每次装完JDK就运行#!/bin/bashls -la /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/bin/java/usr/libexec/java_home -v 21输出都正常才算成功。Docker构建时javac: command not found使用了jre镜像而非jdk镜像改用eclipse-temurin:21-jdk-jammy在Dockerfile第一行加注释# WARNING: jre image has no javac, use jdk image for build stage避免新人踩坑。Windows下set JAVA_HOMEC:\dev\jdk-21后echo %JAVA_HOME%仍为空环境变量配置在“用户变量”而非“系统变量”或没重启命令行右键“此电脑”→“属性”→“高级系统设置”→“环境变量”在“系统变量”里新建Windows环境变量生效需要“重启资源管理器”或“注销重登”。快捷方式任务管理器→“Windows资源管理器”→右键“重新启动”。Ubuntu上apt install openjdk-21-jdk后java -version仍显示JDK 17系统有多个JDKupdate-alternatives未切换执行sudo update-alternatives --config java选择JDK 21对应的编号在/etc/profile.d/java.sh里加一行sudo update-alternatives --set java /usr/lib/jvm/java-21-openjdk-amd64/jre/bin/java确保开机自动切换。最后分享一个真实案例去年帮一家电商公司做技术栈升级他们线上用JDK 17新需求要用虚拟线程。运维同事在测试环境装了JDK 21java -version一切正常但Spring Boot服务启动后HTTP请求延迟飙升。排查三天最终发现是/etc/default/tomcat9里硬编码了JAVA_HOME/usr/lib/jvm/java-1.17.0-openjdk-amd64Tomcat启动时根本没用新JDK。教训是环境变量配置不是一次性的要覆盖所有服务启动脚本、守护进程、定时任务的上下文。现在我的标准操作是装完JDK后用grep -r JAVA_HOME /etc/扫一遍所有配置文件确保没有遗漏。5. 进阶准备JDK 21核心特性验证与开发环境加固装完JDK只是起点真正发挥价值在于用起来。JDK 21有三大必须验证的特性它们不是锦上添花而是重构开发习惯的基石。5.1 虚拟线程Virtual Threads告别ThreadPoolExecutor的繁琐配置虚拟线程是JDK 21最重磅的特性它让Java首次具备了类似Go goroutine的轻量级并发能力。传统线程Platform Thread受限于操作系统线程数量通常几千个而虚拟线程由JVM管理单机可轻松创建百万级。快速验证代码public class VirtualThreadDemo { public static void main(String[] args) throws Exception { // 启动10万个虚拟线程 try (var executor Executors.newVirtualThreadPerTaskExecutor()) { for (int i 0; i 100_000; i) { executor.submit(() - { try { Thread.sleep(1000); // 模拟I/O等待 System.out.println(Thread Thread.currentThread().getName() done); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }); } } System.out.println(All tasks submitted); } }编译运行javac VirtualThreadDemo.java java VirtualThreadDemo。如果能在几秒内完成且内存占用低于200MB说明虚拟线程工作正常。如果报错java.lang.UnsupportedOperationException: Virtual threads are not supported on this platform说明你的JDK不是完整版比如某些精简版JRE必须重装完整JDK。实操心得虚拟线程不是万能的。它最适合I/O密集型场景数据库查询、HTTP调用、文件读写对CPU密集型任务如图像处理、加密计算反而会因频繁调度降低性能。我建议在Spring Boot项目里用Async方法配合TaskExecutor时将线程池换成虚拟线程执行器Bean public TaskExecutor taskExecutor() { return Executors.newVirtualThreadPerTaskExecutor(); }这样所有Async方法自动获得虚拟线程支持无需改业务代码。5.2 模式匹配Pattern Matching让instanceof和switch告别冗余代码JDK 21完善了模式匹配让类型判断和分支逻辑极度简洁。验证代码// instanceof模式匹配 Object obj Hello World; if (obj instanceof String s) { // 直接声明并赋值 System.out.println(s.length()); // s已确定为String可直接调用方法 } // switch模式匹配 Object value 42; int result switch (value) { case Integer i - i * 2; // i是Integer类型变量 case String s - s.length(); // s是String类型变量 case null - -1; default - 0; }; System.out.println(result);这段代码在JDK 21下编译通过但在JDK 17下会报错。它是检验JDK版本和编译器是否正确的黄金标准。注意IDE的语法高亮可能滞后。如果IntelliJ IDEA里case Integer i标红别急着怀疑JDK先检查File → Project Structure →
返回列表