1. 并发模型改进
Java 8
• 特性:通过 CompletableFuture 和 ForkJoinPool 支持异步编程,但线程创建和切换成本较高。
• 示例:
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> System.out.println("Java 8 Thread"));
Java 21
• 特性:引入虚拟线程(Virtual Threads)(JEP 444),轻量级线程显著提升高并发性能。
• 示例:
Thread.startVirtualThread(() -> System.out.println("Java 21 Virtual Thread"));
// 或使用结构化并发(Structured Concurrency)
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
scope.fork(() -> System.out.println("Task 1"));
scope.fork(() -> System.out.println("Task 2"));
scope.join();
}
2. 函数式编程增强
Java 8
• 特性:引入 Lambda 表达式 和 Stream API,支持函数式风格编程。
• 示例:
List<Integer> numbers = Arrays.asList(1, 2, 3);
numbers.stream()
.filter(n -> n % 2 == 0)
.forEach(System.out::println);
Java 21
• 特性:Lambda 参数支持更灵活的模式匹配,结合 Record 类 和 模式匹配 更简洁。
• 示例:
// 结合记录类(Record)
record Point(int x, int y) {}
List<Point> points = List.of(new Point(1, 2), new Point(3, 4));
points.stream()
.filter(p -> p.x() > 1)
.forEach(System.out::println);
// 模式匹配(Pattern Matching for switch)
Object obj = "Hello";
String result = switch (obj) {
case String s -> "String: " + s;
case Integer i -> "Integer: " + i;
default -> "Unknown";
};
3. 数据类(Record Class)
Java 8
• 特性:需手动编写 POJO 类,包含大量样板代码(如 equals, hashCode, toString)。
• 示例:
public class Person {
private final String name;
private final int age;
// 构造函数、getter、equals、hashCode、toString 等需要手动实现
}
Java 21
• 特性:Record 类(Java 16 引入,Java 21 优化)自动生成不可变数据类的模板代码。
• 示例:
record Person(String name, int age) {}
// 自动实现构造函数、equals、hashCode、toString 等方法
Person person = new Person("Alice", 30);
4. 模式匹配(Pattern Matching)
Java 8
• 特性:instanceof 后需显式类型转换。
• 示例:
Object obj = "Java 8";
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
Java 21
• 特性:支持 模式匹配的 instanceof 和 模式匹配的 switch(Java 16+),简化代码。
• 示例:
// instanceof 模式匹配
if (obj instanceof String s) {
System.out.println(s.length());
}
// switch 模式匹配(Java 21 正式特性)
switch (obj) {
case Integer i -> System.out.println("Integer: " + i);
case String s -> System.out.println("String: " + s);
default -> throw new IllegalArgumentException();
}
5. 其他关键特性
Java 21 新增
- 密封类(Sealed Classes)(Java 17):
public sealed interface Shape permits Circle, Rectangle {} public final class Circle implements Shape { /*...*/ } public final class Rectangle implements Shape { /*...*/ } - 字符串模板(String Templates,预览特性):
String name = "Java"; String message = STR."Hello \{name}!"; // 输出 "Hello Java!" - 分代 ZGC(Generational ZGC):提升垃圾回收效率。
Java 8 对比缺失
• Java 8 缺乏现代并发模型(虚拟线程)、模式匹配、记录类等特性。
总结对比
| 特性 | Java 8 | Java 21 |
|---|---|---|
| 并发模型 | 基于线程池和 CompletableFuture |
虚拟线程、结构化并发 |
| 函数式编程 | Lambda 和 Stream API 基础支持 | 结合记录类、模式匹配的更高级用法 |
| 数据类 | 手动编写 POJO | 自动生成不可变数据类(Record) |
| 模式匹配 | 不支持 | instanceof 和 switch 模式匹配 |
| 代码简洁性 | 较多样板代码 | 语法糖和自动生成代码大幅减少冗余 |
升级建议
• Java 8 → Java 21 的优势:更简洁的语法、更高的并发性能、更安全的类型系统。
• 注意事项:部分 Java 21 特性需注意模块化(JPMS)兼容性,旧项目需逐步迁移。

浙公网安备 33010602011771号