Featured image of post 从 Lambda 到虚拟线程——Java 关键特性演进

从 Lambda 到虚拟线程——Java 关键特性演进

Java 已经走过 30 年——从 8 的 Lambda 到 21 的虚拟线程到 25 的 Valhalla 雏形。一篇梳理 Java 的过去、现在与未来

写在前面

Java 已经走过 30 年——从 1995 年发布到 2025 年的 25——它被"唱衰"过很多次,但每次都挺过来了。

很多人对 Java 的印象停留在 8——Lambda、Stream、Optional。但 Java 8 之后每 6 个月一个版本——加入了大量颠覆性特性:

  • 9-11:模块化、var、HTTP Client
  • 14-17:Records、Sealed Classes、Pattern Matching
  • 19-21:虚拟线程、结构化并发、Pattern Matching for Switch
  • 22-25:Valhalla 进展、String Templates、Stream 增强

本文按时间线梳理——从 Java 8(2014)一路到 Java 25(2025),再看未来 5 年走向何方


一、Java 8(2014):函数式革命

仍是 2026 年最广泛使用的版本——全球生产环境的 Java 中至少 30% 还在 Java 8

核心特性:

  • Lambda 表达式
  • Stream API
  • Optional
  • 新 Date/Time API(替代腐朽的 Date / Calendar
  • 接口默认方法 / 静态方法

Java 8 让 Java 从纯 OOP 拥抱函数式——是 Java 的"现代化转折"。


二、Java 11(2018):第一个 LTS 之后

Java 9-10 是过渡——Java 11 是第一个长期支持版本(LTS)。

核心特性:

  • var 局部变量类型推断
  • HTTP Client(替代笨重的 HttpURLConnection)
  • String 增强isBlanklinesstrip 等)
  • 删除 Java EE 模块(javax.xml、java.activation 等)
  • G1 GC 默认

Java 11 是当下仍在生产广泛使用的版本——多数中型项目的现状。


三、Java 17(2021):第二个 LTS

Spring Boot 3 的最低基线——强迫整个生态升级

新增:

  • Records:数据载体类
  • Sealed Classes:限定的继承
  • Pattern Matching for instanceof
  • Switch Expressions
  • Text Blocks
  • 删除 Applet API
  • Pseudorandom Number Generators

Java 17 是目前最值得长期 commit 的版本——稳定 + 现代 + 生态全面支持。


四、Java 21(2023):虚拟线程时代

第三个 LTS——Java 21 的核心特性可以说是 Java 近十年最具分量的一批

虚拟线程(Project Loom)

1
2
3
4
5
// 之前:每个请求一个 OS 线程
ExecutorService pool = Executors.newFixedThreadPool(200);

// 现在:虚拟线程,能开几百万个
ExecutorService pool = Executors.newVirtualThreadPerTaskExecutor();

虚拟线程让传统 MVC 同步代码 = 异步性能——不需要学 WebFlux / Reactive 了。

结构化并发

1
2
3
4
5
6
7
8
9
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
    StructuredTaskScope.Subtask<User>  userTask  = scope.fork(() -> fetchUser(id));
    StructuredTaskScope.Subtask<Order> orderTask = scope.fork(() -> fetchOrder(id));

    scope.join();
    scope.throwIfFailed();

    return new Result(userTask.get(), orderTask.get());
}

注:scope.fork(...) 在 Java 21 返回的是 StructuredTaskScope.Subtask<T>,不是 Future<T>join() 之前直接 Subtask.get() 会抛 IllegalStateException——必须先 join() 让所有子任务终止、再 throwIfFailed() 处理失败、最后才能 get() 取值。

让"一组并发任务"有清晰的生命周期——避免 goroutine 泄漏式的反模式。

Pattern Matching for Switch

1
2
3
4
5
6
7
8
9
String describe(Object obj) {
    return switch (obj) {
        case Integer i when i > 0 -> "positive int " + i;
        case Integer i -> "non-positive int " + i;
        case String s -> "string of length " + s.length();
        case null -> "null";
        default -> "unknown";
    };
}

模式匹配让代码更简洁——这一波明显借鉴了 Scala / Kotlin 的成熟实践。

Records & Sealed 升级

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public sealed interface Shape permits Circle, Square, Triangle {}

public record Circle(double radius) implements Shape {}

double area(Shape s) {
    return switch (s) {
        case Circle c -> Math.PI * c.radius() * c.radius();
        case Square sq -> sq.side() * sq.side();
        case Triangle t -> 0.5 * t.base() * t.height();
    };
}

Records + Sealed + Pattern Matching = 代数数据类型(ADT) ——表达力大幅提升。


五、Java 25(2025 LTS):当下的最新 LTS

2025 年 9 月发布——第四个 LTS

新加 / 标准化的特性:

Stream Gatherers(标准化)

1
2
3
4
List<List<Integer>> windows = Stream.of(1, 2, 3, 4, 5)
    .gather(Gatherers.windowFixed(2))
    .toList();
// [[1, 2], [3, 4], [5]]

Stream API 的扩展点——能写自己的中间操作。

Scoped Values(替代 ThreadLocal)

1
2
3
4
5
private static final ScopedValue<User> CURRENT_USER = ScopedValue.newInstance();

ScopedValue.where(CURRENT_USER, user).run(() -> {
    // 任意位置可读 CURRENT_USER.get()
});

比 ThreadLocal 更安全(不可变)、虚拟线程友好。

Class-File API

操作 .class 文件的标准 API——替代第三方 ASM / Javassist

Pattern Matching 进一步增强

支持 deconstruction patterns:

1
2
3
if (obj instanceof Point(int x, int y)) {
    // 直接解构出 x, y
}

KEM(Key Encapsulation Mechanism)API

后量子密码学的标准 API——为量子计算时代做准备。


六、未来:在路上的特性

Project Valhalla:Value Types

Java 历史上最大的待发布特性之一——把 int / long 这种"值"也变成 first-class 类型:

1
2
3
4
5
6
value class Point {
    int x;
    int y;
}

// Point 像 int 一样在栈上,没有 object header

对性能极其敏感的场景(数值计算、大量小对象)会有数量级的提升。预计 Java 27/28 才能正式 GA。

Project Panama:原生互操作

替代 JNI——让 Java 直接调 C 库不需要写胶水代码

1
2
3
4
5
SymbolLookup loader = SymbolLookup.libraryLookup("c", arena);
MethodHandle strlen = Linker.nativeLinker().downcallHandle(
    loader.find("strlen").orElseThrow(),
    FunctionDescriptor.of(JAVA_LONG, ADDRESS)
);

部分功能在 Java 22 已 GA(FFM API)——后续完善中。

Project Leyden:AOT 编译

让 Java 启动时间更接近 GraalVM Native Image——但保留 JVM 的全部能力

Project Lilliput:紧凑对象头

把对象头从 96 位压到 64 位——所有 Java 对象内存占用减小,对小对象密集场景显著。

Project Babylon:HAT(Heterogeneous Accelerator Toolkit)

让 Java 直接利用 GPU / TPU——为 AI 时代准备


七、生态展望

几条趋势性判断,2026 年看:

  • 虚拟线程改变了 Reactive 的位置——Java 21+ 让传统 MVC + 虚拟线程在高并发场景接近 WebFlux 的吞吐,多团队从 WebFlux 回到 MVC + 虚拟线程,Reactive 的适用面收窄到流式/背压场景。
  • Native Image 在特定场景成为主流——Serverless 冷启动、CLI 工具、短生命周期 K8s Pod 这类场景里 GraalVM Native Image 已是常见选择;通用业务系统仍用 JVM。
  • 企业 AI 服务的部署主力仍是 Java——Python 主导训练,但模型上线后的高 QPS 推理服务、RAG 中台、Agent 编排,Spring AI、LangChain4j 等 Java 框架在快速吃这块。
  • Spring Boot 3 强制 Java 17+ 让"还在 Java 8/11"的项目数量在 2026 年明显下降。
  • Kotlin 在 Android 仍占主导,服务端推进缓慢——Java 21/25 已吸收了 Kotlin 大部分语法优势,服务端从 Java 转 Kotlin 的动力变弱。

至于 Java 还有没有未来——TIOBE 长期前 5(近年常驻第 3-4)、GitHub Octoverse 长期前 5、金融/电信/政府企业市场 90% 仍是 Java、Stack Overflow 调查显示使用率稳定。生态成熟 + 性能稳定 + 工具完善 + 招聘容易这四条没有变。可以预期的几个落地方向:服务端主力(金融、电商、SaaS 后端)、大数据基础设施(Kafka / Flink / Spark / Elasticsearch 都是 JVM)、企业 AI 服务部署。


八、给开发者的实战建议

1. 升级路径

  • Java 8Java 17:主要工作是 module path / removed API 检查
  • Java 11Java 17:相对平滑
  • Java 17Java 21:稳健,主要享受虚拟线程
  • Java 21Java 25:仅加新特性,向后兼容

没有 LTS 间跳跃的特殊难点——多数升级 1-2 周能完成。

2. 选择当下的 LTS

如果要长期 commit:

  • 新项目 → Java 21 或 25
  • 稳定老项目 → 先升 17,再考虑 21
  • 特殊老系统 → Java 8 仍可用,但 Spring Boot 2.7 EOL 在即

3. 关注的特性

按重要性:

  1. 虚拟线程(Java 21+)——直接影响架构选择
  2. Pattern Matching(Java 21+)——影响日常代码风格
  3. Records / Sealed(Java 17+)——值类对象设计
  4. Text Blocks(Java 17+)——SQL / JSON 嵌入更舒适
  5. Switch Expressions(Java 17+)——告别 break

4. 工具链

  • JDK 发行版:Eclipse Temurin(默认推荐)、Amazon Corretto、Azul Zulu、GraalVM
  • 构建工具:Maven 仍主流,Gradle 在新项目崛起
  • IDE:IntelliJ IDEA 是事实标准

小结

把全文压一句:

Java 不是『过气』也不是『万能』——它是『稳健、强生态、持续演进』的成熟语言。从 8 到 25,每一步都在补齐缺陷,但保留了向后兼容的稳定性。

工程要点:

  • 当下 LTS 用 Java 21 或 25
  • Spring Boot 3 强制 Java 17+
  • 虚拟线程改变了高并发架构选择
  • Pattern Matching 让代码现代化
  • Valhalla / Panama / Leyden 是未来 5 年最大的 Java 项目

如果你 5 年没升过 Java,2026 年值得认真考虑升级——Java 21+ 的体验和过去差别很大。

使用 Hugo 构建
主题 StackJimmy 设计