Luminous.X in the house  
Enjoy my whole life!

1. 并发模型改进

Java 8

特性:通过 CompletableFutureForkJoinPool 支持异步编程,但线程创建和切换成本较高。
示例

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 新增

  1. 密封类(Sealed Classes)(Java 17):
    public sealed interface Shape permits Circle, Rectangle {}
    public final class Circle implements Shape { /*...*/ }
    public final class Rectangle implements Shape { /*...*/ }
    
  2. 字符串模板(String Templates,预览特性)
    String name = "Java";
    String message = STR."Hello \{name}!"; // 输出 "Hello Java!"
    
  3. 分代 ZGC(Generational ZGC):提升垃圾回收效率。

Java 8 对比缺失

• Java 8 缺乏现代并发模型(虚拟线程)、模式匹配、记录类等特性。


总结对比

特性 Java 8 Java 21
并发模型 基于线程池和 CompletableFuture 虚拟线程、结构化并发
函数式编程 Lambda 和 Stream API 基础支持 结合记录类、模式匹配的更高级用法
数据类 手动编写 POJO 自动生成不可变数据类(Record)
模式匹配 不支持 instanceofswitch 模式匹配
代码简洁性 较多样板代码 语法糖和自动生成代码大幅减少冗余

升级建议

Java 8 → Java 21 的优势:更简洁的语法、更高的并发性能、更安全的类型系统。
注意事项:部分 Java 21 特性需注意模块化(JPMS)兼容性,旧项目需逐步迁移。

posted on 2025-05-12 15:34  Luminous_X  阅读(591)  评论(0)    收藏  举报