告别旧版:立即下载并升级到 Java 21 – wiki基地


告别旧版:立即下载并升级到 Java 21

Java 世界一直在不断发展,每一次的长期支持(LTS)版本的发布,都标志着一个重要的里程碑。现在,Java 21 已经正式发布,它不仅带来了性能上的显著提升,还引入了一系列强大的新功能,旨在简化开发、提高生产力。无论您是企业开发者还是个人爱好者,现在都是告别旧版本、拥抱 Java 21 的最佳时机。

为什么选择 Java 21?

作为最新的 LTS 版本,Java 21 意味着您将获得 Oracle 提供的数年稳定支持和安全更新,这对于任何生产环境中的应用程序都至关重要。但更令人兴奋的是它带来的变革性新特性:

  • 虚拟线程(Virtual Threads):彻底改变并发编程的游戏规则。
  • 序列化集合(Sequenced Collections):提供统一、便捷的集合操作接口。
  • 更智能的语言特性:如字符串模板和未命名模式,让代码更简洁、更安全。
  • 性能巅峰:通过分代 ZGC 等改进,进一步降低延迟,提升应用吞吐量。

是时候深入了解这些激动人心的变化了。

Java 21 核心亮点解析

1. 虚拟线程(Project Loom)

这是 Java 21 中最引人注目的特性。在过去,我们依赖操作系统线程来处理并发任务,但这些线程是宝贵且昂贵的资源。虚拟线程则是一种由 JVM 管理的、极其轻量级的线程。

它解决了什么问题?
在传统的“一个请求一个线程”模型中,当应用需要处理成千上万的并发连接时(例如微服务或 Web 应用),系统会因创建大量平台线程而迅速耗尽资源。

虚拟线程如何工作?
您可以轻松创建数百万个虚拟线程,而不会对系统造成巨大负担。当虚拟线程遇到阻塞操作(如 I/O 等待)时,它不会占用操作系统线程,而是“让出”它,让底层平台线程可以去执行其他任务。这使得开发者可以用简单、易读的同步代码,编写出具备极高吞吐量的异步应用。

java
// 使用虚拟线程执行任务,代码简洁明了
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1));
return i;
});
});
} // executor.close() 会等待所有任务完成

2. 序列化集合 (Sequenced Collections)

在 Java 21 之前,要获取 List 的第一个元素很简单 (list.get(0)), 但获取 LinkedHashSet 的第一个元素就很麻烦。序列化集合为此引入了统一的接口。

任何拥有确定出现顺序的集合(List, LinkedHashSet, SortedSet 等)现在都实现了 SequencedCollection 接口,它提供了简单、统一的方法:

  • getFirst(): 获取第一个元素。
  • getLast(): 获取最后一个元素。
  • reversed(): 返回一个反序的集合视图。

“`java
List list = new ArrayList<>(List.of(“A”, “B”, “C”));
System.out.println(list.getFirst()); // 输出 “A”
System.out.println(list.getLast()); // 输出 “C”

// 反向遍历
for (String s : list.reversed()) {
System.out.print(s); // 输出 “CBA”
}
“`

3. 字符串模板 (预览功能)

字符串拼接一直是 Java 代码中的常见痛点。简单的 + 拼接可读性差,String.formatMessageFormat 又有些繁琐。Java 21 引入了更安全、更直观的字符串模板。

它允许您将变量和表达式直接嵌入到字符串中,代码清晰且类型安全。

“`java
String name = “Joan”;
// 使用 STR 模板处理器
String info = STR.”My name is {name}.”;
// info 的值为 “My name is Joan.”

// 还可以嵌入复杂的表达式
String json = STR.”””
{
“name”: “{name}”,
“birthDate”: “{LocalDate.now()}”
}
“””;
“`

4. 未命名模式和变量 (预览功能)

有时,您必须声明一个变量,但又从不使用它。例如,在 try-with-resources 语句或 switch 表达式中。Java 21 允许使用下划线 _ 作为占位符,以表明该变量是“未命名”或“无用”的。

这不仅能减少代码杂音,还能让编译器和静态分析工具更好地理解您的意图。

“`java
// 在 switch 中,我们只关心是否为 Point,不关心其内部 x, y 的值
switch (obj) {
case Point(, ): // 匹配 Point 类型,但不使用其字段
System.out.println(“It’s a point.”);
break;
// …
}

// 在循环中,我们只关心执行次数,不关心具体的值
for (int i = 0; i < 10; i++) {
// some repeated action…
}
// 可以写成:
for (var _ : aList) {
// aList 有多少个元素,就执行多少次
}
“`

如何下载和升级?

升级到 Java 21 非常简单。

  1. 下载 JDK

  2. 安装并配置环境变量

    • 运行安装程序。
    • 更新系统的 JAVA_HOME 环境变量,使其指向 Java 21 的安装目录。
    • Windows: 在“系统属性” -> “高级” -> “环境变量”中修改 JAVA_HOMEPath
    • macOS/Linux: 在 .zshrc, .bash_profile 或类似的文件中更新 JAVA_HOME 并将其 bin 目录添加到 PATH
      bash
      export JAVA_HOME=/path/to/your/jdk-21
      export PATH=$JAVA_HOME/bin:$PATH
  3. 验证安装
    打开一个新的终端或命令提示符,运行以下命令:
    bash
    java -version

    如果您看到类似 openjdk version "21..." 的输出,那么恭喜您,安装成功!

  4. 更新您的项目配置

    • Maven: 在 pom.xml 中,将 java.version 属性更新为 21
      xml
      <properties>
      <java.version>21</java.version>
      </properties>
    • Gradle: 在 build.gradle (或 build.gradle.kts) 中,更新 sourceCompatibilitytargetCompatibility
      groovy
      // build.gradle
      java {
      sourceCompatibility = JavaVersion.VERSION_21
      targetCompatibility = JavaVersion.VERSION_21
      }

结论

Java 21 不仅仅是一次常规更新,它是一次飞跃。凭借虚拟线程带来的并发革命、序列化集合的便捷性以及众多语法上的改进,它为开发者提供了构建下一代高性能、高可维护性应用的强大工具。

长期支持(LTS)的保障让您可以放心大胆地在生产环境中使用它。不要再犹豫了,立即下载并升级到 Java 21,亲自体验 Java 的未来!

滚动至顶部